From 2e9c7cd69e5da4c59f4c3ed3e79b129b61a21772 Mon Sep 17 00:00:00 2001 From: Dinger Date: Mon, 23 Mar 2026 23:01:04 +0800 Subject: [PATCH] feat: AI analysis engine refactor, dark theme polish & virtual position management Core changes: - Refactor FastAnalysisService: single LLM multi-factor analysis replaces 7-agent pipeline; add multi-timeframe consensus, threshold calibration, confidence calibration, multi-model ensemble voting - Add RAG memory injection and reflection validation (analysis_memory + reflection worker) - Simplify billing config: remove unused strategy_run/backtest/portfolio_monitor, add ai_code_gen separate billing (different token consumption scale) - Settings hot-reload after save, no backend restart needed Frontend: - Global dark theme overhaul: pure black palette replacing blue-tinted colors across sidebar/header/dashboard/analysis/K-line/user-manage/profile/settings/billing - Fix USDT payment modal dark theme (portal rendering broke CSS selectors) - Refactor position modal: direction + quantity + entry price, remove add/reduce logic, show raw DB values on re-open, save exactly what user inputs - Fix Polymarket prediction market dark text - i18n for position modal title Backend: - Position management: one record per symbol (DELETE+INSERT replacing ON CONFLICT with side), fixes PnL showing 0 when switching long/short - MarketDataCollector data fetching optimization - portfolio_monitor scheduled monitoring improvements - env.example reorganized: common config first, advanced config last Documentation: - README architecture diagram updated to FastAnalysisService flow - Add virtual position, AI tuning config, billing items documentation - Add INDICATOR_DEFINITIONS_CN.md, FRONTEND_FAST_ANALYSIS.md Made-with: Cursor --- README.md | 69 +- backend_api_python/README.md | 19 +- backend_api_python/app/__init__.py | 6 + backend_api_python/app/data_sources/base.py | 40 +- .../app/routes/fast_analysis.py | 106 +++ .../app/routes/global_market.py | 29 +- backend_api_python/app/routes/indicator.py | 13 +- backend_api_python/app/routes/portfolio.py | 23 +- backend_api_python/app/routes/settings.py | 157 +++- .../app/services/analysis_memory.py | 326 +++++++-- .../app/services/billing_service.py | 23 +- .../app/services/fast_analysis.py | 674 ++++++++++++++---- backend_api_python/app/services/llm.py | 70 +- .../app/services/market_data_collector.py | 287 +++++--- .../app/services/portfolio_monitor.py | 231 +++--- backend_api_python/app/services/reflection.py | 100 +++ .../app/services/trading_executor.py | 27 +- backend_api_python/env.example | 101 ++- backend_api_python/scripts/run_calibration.py | 35 + .../scripts/run_reflection_task.py | 20 +- docs/FRONTEND_FAST_ANALYSIS.md | 62 ++ docs/INDICATOR_DEFINITIONS_CN.md | 18 + docs/README_CN.md | 93 ++- frontend/VERSION | 2 +- frontend/dist/css/125.37fb7134.css | 1 - frontend/dist/css/127.340147b1.css | 1 + frontend/dist/css/158.e48d5d81.css | 1 - .../css/{55.9a2b4136.css => 18.8f36e18e.css} | 2 +- frontend/dist/css/206.136e873f.css | 1 + frontend/dist/css/221.340147b1.css | 1 + frontend/dist/css/320.136e873f.css | 1 + frontend/dist/css/355.02ed56c8.css | 1 - frontend/dist/css/367.729cfe93.css | 1 - frontend/dist/css/38.973fab6f.css | 1 + frontend/dist/css/397.20e2b587.css | 1 - frontend/dist/css/40.02ed56c8.css | 1 - frontend/dist/css/447.1113ae8a.css | 1 - frontend/dist/css/472.e7ead240.css | 1 + frontend/dist/css/488.c66b70a6.css | 1 + .../{185.c3803b75.css => 506.c3803b75.css} | 0 frontend/dist/css/620.973fab6f.css | 1 + frontend/dist/css/645.20e2b587.css | 1 - frontend/dist/css/662.ff086137.css | 1 + frontend/dist/css/734.1113ae8a.css | 1 - frontend/dist/css/795.752239ab.css | 1 + frontend/dist/css/798.c66b70a6.css | 1 + frontend/dist/css/805.ff086137.css | 1 + frontend/dist/css/811.fea2e0fa.css | 1 - frontend/dist/css/829.e48d5d81.css | 1 - frontend/dist/css/875.752239ab.css | 1 + frontend/dist/css/896.37fb7134.css | 1 - frontend/dist/css/958.729cfe93.css | 1 - frontend/dist/css/app.23a9a8f8.css | 1 + frontend/dist/css/app.ee3dda40.css | 1 - ...32dabe8f.css => theme-colors-e1bf67d0.css} | 228 +++--- frontend/dist/index.html | 2 +- frontend/dist/js/125-legacy.00a8217b.js | 1 - ...acy.0d4510be.js => 127-legacy.18ffff11.js} | 2 +- ...gacy.e43a5f53.js => 18-legacy.852f0d29.js} | 2 +- .../js/{55.8272df87.js => 18.250f1bfe.js} | 2 +- frontend/dist/js/206.aa57506d.js | 1 + .../js/{829.17bfab9d.js => 221.965c8579.js} | 2 +- frontend/dist/js/320-legacy.e6d4662f.js | 1 + frontend/dist/js/355-legacy.d4eea827.js | 1 - frontend/dist/js/367.4284ba87.js | 1 - frontend/dist/js/38.9f8bb2b9.js | 18 + frontend/dist/js/397-legacy.14ad2c5b.js | 1 - frontend/dist/js/40.0f540839.js | 1 - frontend/dist/js/447.1f8e0f21.js | 18 - frontend/dist/js/472-legacy.378c6ee4.js | 1 + frontend/dist/js/472.4317bd73.js | 1 + frontend/dist/js/488-legacy.c093a9e0.js | 1 + ...acy.0a1e2706.js => 506-legacy.07ea73fa.js} | 2 +- .../js/{185.9e7876ef.js => 506.7a09321c.js} | 2 +- frontend/dist/js/620-legacy.c4300c85.js | 18 + frontend/dist/js/645.22e27101.js | 1 - frontend/dist/js/662.ec37067e.js | 1 + frontend/dist/js/734-legacy.1e8a348d.js | 18 - frontend/dist/js/795.a2daad4d.js | 1 + frontend/dist/js/798.449c05b6.js | 1 + frontend/dist/js/805-legacy.7541cd95.js | 1 + frontend/dist/js/811-legacy.47af9a60.js | 1 - frontend/dist/js/811.bdce7b14.js | 1 - frontend/dist/js/875-legacy.6eba2135.js | 1 + frontend/dist/js/896.852a8b00.js | 1 - frontend/dist/js/958-legacy.623e6376.js | 1 - frontend/dist/js/app-legacy.73c5f6b0.js | 1 - frontend/dist/js/app-legacy.fca528f4.js | 1 + frontend/dist/js/app.09efca8e.js | 1 + frontend/dist/js/app.4799d28b.js | 1 - ...65.js => chunk-vendors-legacy.a81203f4.js} | 4 +- ....47fd2294.js => chunk-vendors.74240b6f.js} | 4 +- .../dist/js/lang-zh-CN-legacy.a4180ad8.js | 1 - .../dist/js/lang-zh-CN-legacy.bbd28917.js | 1 + frontend/dist/js/lang-zh-CN.14105a16.js | 1 - frontend/dist/js/lang-zh-CN.8bd213cf.js | 1 + 96 files changed, 2131 insertions(+), 780 deletions(-) create mode 100644 backend_api_python/app/services/reflection.py create mode 100644 backend_api_python/scripts/run_calibration.py create mode 100644 docs/FRONTEND_FAST_ANALYSIS.md create mode 100644 docs/INDICATOR_DEFINITIONS_CN.md delete mode 100644 frontend/dist/css/125.37fb7134.css create mode 100644 frontend/dist/css/127.340147b1.css delete mode 100644 frontend/dist/css/158.e48d5d81.css rename frontend/dist/css/{55.9a2b4136.css => 18.8f36e18e.css} (59%) create mode 100644 frontend/dist/css/206.136e873f.css create mode 100644 frontend/dist/css/221.340147b1.css create mode 100644 frontend/dist/css/320.136e873f.css delete mode 100644 frontend/dist/css/355.02ed56c8.css delete mode 100644 frontend/dist/css/367.729cfe93.css create mode 100644 frontend/dist/css/38.973fab6f.css delete mode 100644 frontend/dist/css/397.20e2b587.css delete mode 100644 frontend/dist/css/40.02ed56c8.css delete mode 100644 frontend/dist/css/447.1113ae8a.css create mode 100644 frontend/dist/css/472.e7ead240.css create mode 100644 frontend/dist/css/488.c66b70a6.css rename frontend/dist/css/{185.c3803b75.css => 506.c3803b75.css} (100%) create mode 100644 frontend/dist/css/620.973fab6f.css delete mode 100644 frontend/dist/css/645.20e2b587.css create mode 100644 frontend/dist/css/662.ff086137.css delete mode 100644 frontend/dist/css/734.1113ae8a.css create mode 100644 frontend/dist/css/795.752239ab.css create mode 100644 frontend/dist/css/798.c66b70a6.css create mode 100644 frontend/dist/css/805.ff086137.css delete mode 100644 frontend/dist/css/811.fea2e0fa.css delete mode 100644 frontend/dist/css/829.e48d5d81.css create mode 100644 frontend/dist/css/875.752239ab.css delete mode 100644 frontend/dist/css/896.37fb7134.css delete mode 100644 frontend/dist/css/958.729cfe93.css create mode 100644 frontend/dist/css/app.23a9a8f8.css delete mode 100644 frontend/dist/css/app.ee3dda40.css rename frontend/dist/css/{theme-colors-32dabe8f.css => theme-colors-e1bf67d0.css} (78%) delete mode 100644 frontend/dist/js/125-legacy.00a8217b.js rename frontend/dist/js/{158-legacy.0d4510be.js => 127-legacy.18ffff11.js} (99%) rename frontend/dist/js/{55-legacy.e43a5f53.js => 18-legacy.852f0d29.js} (99%) rename frontend/dist/js/{55.8272df87.js => 18.250f1bfe.js} (98%) create mode 100644 frontend/dist/js/206.aa57506d.js rename frontend/dist/js/{829.17bfab9d.js => 221.965c8579.js} (99%) create mode 100644 frontend/dist/js/320-legacy.e6d4662f.js delete mode 100644 frontend/dist/js/355-legacy.d4eea827.js delete mode 100644 frontend/dist/js/367.4284ba87.js create mode 100644 frontend/dist/js/38.9f8bb2b9.js delete mode 100644 frontend/dist/js/397-legacy.14ad2c5b.js delete mode 100644 frontend/dist/js/40.0f540839.js delete mode 100644 frontend/dist/js/447.1f8e0f21.js create mode 100644 frontend/dist/js/472-legacy.378c6ee4.js create mode 100644 frontend/dist/js/472.4317bd73.js create mode 100644 frontend/dist/js/488-legacy.c093a9e0.js rename frontend/dist/js/{185-legacy.0a1e2706.js => 506-legacy.07ea73fa.js} (59%) rename frontend/dist/js/{185.9e7876ef.js => 506.7a09321c.js} (59%) create mode 100644 frontend/dist/js/620-legacy.c4300c85.js delete mode 100644 frontend/dist/js/645.22e27101.js create mode 100644 frontend/dist/js/662.ec37067e.js delete mode 100644 frontend/dist/js/734-legacy.1e8a348d.js create mode 100644 frontend/dist/js/795.a2daad4d.js create mode 100644 frontend/dist/js/798.449c05b6.js create mode 100644 frontend/dist/js/805-legacy.7541cd95.js delete mode 100644 frontend/dist/js/811-legacy.47af9a60.js delete mode 100644 frontend/dist/js/811.bdce7b14.js create mode 100644 frontend/dist/js/875-legacy.6eba2135.js delete mode 100644 frontend/dist/js/896.852a8b00.js delete mode 100644 frontend/dist/js/958-legacy.623e6376.js delete mode 100644 frontend/dist/js/app-legacy.73c5f6b0.js create mode 100644 frontend/dist/js/app-legacy.fca528f4.js create mode 100644 frontend/dist/js/app.09efca8e.js delete mode 100644 frontend/dist/js/app.4799d28b.js rename frontend/dist/js/{chunk-vendors-legacy.74c62065.js => chunk-vendors-legacy.a81203f4.js} (99%) rename frontend/dist/js/{chunk-vendors.47fd2294.js => chunk-vendors.74240b6f.js} (99%) delete mode 100644 frontend/dist/js/lang-zh-CN-legacy.a4180ad8.js create mode 100644 frontend/dist/js/lang-zh-CN-legacy.bbd28917.js delete mode 100644 frontend/dist/js/lang-zh-CN.14105a16.js create mode 100644 frontend/dist/js/lang-zh-CN.8bd213cf.js diff --git a/README.md b/README.md index e8c2077..dd139a2 100644 --- a/README.md +++ b/README.md @@ -294,6 +294,7 @@ Phase 3 (Decision): 🎯 TraderAgent → BUY / SELL / HOLD (with confidence %) - **🧠 Memory-Augmented** — Agents learn from past analyses (local RAG, not cloud) - **🔌 5+ LLM Providers**: OpenRouter (100+ models), OpenAI, Gemini, DeepSeek, Grok - **📊 Polymarket Prediction Markets** — On-demand AI analysis for prediction markets. Input a market link or title → AI analyzes probability divergence, opportunity score, and trading recommendations. Full history tracking and billing integration. +- **📋 Virtual Position Tracking** — Create virtual positions directly from your watchlist with long/short direction, quantity, and entry price. Real-time PnL calculation without connecting to a real exchange. ### 📈 Full Trading Lifecycle @@ -340,7 +341,7 @@ Phase 3 (Decision): 🎯 TraderAgent → BUY / SELL / HOLD (with confidence %) - **💳 Membership Plans** — Monthly / Yearly / Lifetime tiers with configurable pricing & credits - **₿ USDT On-Chain Payment** — TRC20 scan-to-pay, HD Wallet (xpub) per-order addresses, auto-reconciliation via TronGrid - **🏪 Indicator Marketplace** — Users publish & sell Python indicators, you take commission -- **⚙️ Admin Dashboard** — Order management, AI usage stats, user analytics +- **⚙️ Admin Dashboard** — Order management, AI usage stats, user analytics; settings hot-reload without server restart ### 🔐 Enterprise-Grade Security @@ -350,49 +351,45 @@ Phase 3 (Decision): 🎯 TraderAgent → BUY / SELL / HOLD (with confidence %) - **Demo Mode** — Read-only mode for public showcases
-🧠 AI Agent Architecture Diagram (Click to expand) +🧠 AI Analysis Architecture (Click to expand) + +Uses **FastAnalysisService** single-LLM flow for speed and multi-factor decisions: ```mermaid flowchart TB subgraph Entry["🌐 API Entry"] - A["📡 POST /api/analysis/multi"] - A2["🔄 POST /api/analysis/reflect"] + A["📡 POST /api/fast-analysis/analyze"] + A2["📜 GET /api/fast-analysis/history"] + A3["📊 GET /api/fast-analysis/similar-patterns"] end - subgraph Service["⚙️ Service Orchestration"] - B[AnalysisService] - C[AgentCoordinator] - D["📊 Build Context
price · kline · news · indicators"] + subgraph Data["📊 Data Layer"] + D1[MarketDataCollector] + D2["Price · Kline · Macro · News · Fundamentals"] + D3["Multi-TF Consensus 1D / 4H / 1H"] end - subgraph Agents["🤖 7-Agent Workflow"] - subgraph P1["📈 Phase 1 · Parallel Analysis"] - E1["🔍 MarketAnalyst"] - E2["📑 FundamentalAnalyst"] - E3["📰 NewsAnalyst"] - E4["💭 SentimentAnalyst"] - E5["⚠️ RiskAnalyst"] - end - subgraph P2["🎯 Phase 2 · Bull vs Bear Debate"] - F1["🐂 BullResearcher"] - F2["🐻 BearResearcher"] - end - subgraph P3["💹 Phase 3 · Final Decision"] - G["🎰 TraderAgent → BUY / SELL / HOLD"] - end + subgraph Analysis["⚙️ Analysis Layer"] + B["FastAnalysisService"] + C["Single LLM Call
Constrained Prompt"] + E["Objective Score + Multi-TF Consensus"] + F["AICalibration Threshold Tuning"] + G["BUY / SELL / HOLD"] end - subgraph Memory["🧠 Local Memory Store"] - M1[("Agent Memories (PostgreSQL)")] + subgraph Memory["🧠 Memory Layer"] + M1[("qd_analysis_memory
PostgreSQL")] + M2["RAG Similar-Pattern Retrieval
(optional prompt injection)"] end - subgraph Reflect["🔄 Reflection Loop"] - R[ReflectionService] - W["⏰ ReflectionWorker → verify + learn"] - end - A --> B --> C --> D - D --> P1 --> P2 --> P3 - Agents <-.->|"RAG retrieval"| M1 - C --> R - W -.->|"update memories"| M1 + A --> B + B --> D1 --> D2 --> D3 + D3 --> C --> E --> F --> G + B -.->|"store"| M1 + M1 -.->|"similar patterns"| M2 + M2 -.->|"optional context"| C + A2 --> M1 + A3 --> M1 ``` +**Flow:** Data collection → Multi-timeframe consensus → Single LLM call → Calibration override → Store in memory. +
--- @@ -499,7 +496,9 @@ The upper part is for first-time deployment, and the lower "Advanced / rarely ch | **Membership** | `MEMBERSHIP_MONTHLY_PRICE_USD`, `MEMBERSHIP_MONTHLY_CREDITS` | | **USDT Payment** | `USDT_PAY_ENABLED`, `USDT_TRC20_XPUB`, `TRONGRID_API_KEY` | | **Proxy** | `PROXY_URL` | -| **Workers** | `ENABLE_PENDING_ORDER_WORKER`, `ENABLE_PORTFOLIO_MONITOR` | +| **Billing** | `BILLING_ENABLED`, `BILLING_COST_AI_ANALYSIS`, `BILLING_COST_AI_CODE_GEN` | +| **Workers** | `ENABLE_PENDING_ORDER_WORKER`, `ENABLE_PORTFOLIO_MONITOR`, `ENABLE_REFLECTION_WORKER` | +| **AI Tuning** | `ENABLE_AI_ENSEMBLE`, `ENABLE_CONFIDENCE_CALIBRATION`, `AI_ENSEMBLE_MODELS` | diff --git a/backend_api_python/README.md b/backend_api_python/README.md index dc10fd4..7056615 100644 --- a/backend_api_python/README.md +++ b/backend_api_python/README.md @@ -177,20 +177,19 @@ POST /api/users/change-password - Change own password ```text GET /api/health GET /api/indicator/kline -POST /api/analysis/multi +POST /api/fast-analysis/analyze - Fast AI analysis (main entry) +GET /api/fast-analysis/history - Analysis history +GET /api/fast-analysis/similar-patterns - RAG similar patterns +POST /api/fast-analysis/feedback - User feedback on analysis ``` -## AI memory augmentation +## AI analysis & memory -This backend includes a lightweight, privacy-first **memory-augmented multi-agent** system: +Uses **FastAnalysisService** (single LLM call, multi-factor): -- Memory DBs stored in PostgreSQL -- API hooks: - - `POST /api/analysis/multi` (main entry) - - `POST /api/analysis/reflect` (manual learn from post-trade outcomes) -- Controls in `.env`: - - `ENABLE_AGENT_MEMORY`, `AGENT_MEMORY_*` - - `ENABLE_REFLECTION_WORKER`, `REFLECTION_WORKER_INTERVAL_SEC` +- Memory: `qd_analysis_memory` in PostgreSQL +- API: `POST /api/fast-analysis/analyze` (main), `/history`, `/similar-patterns`, `/feedback` +- Calibration: `AICalibrationService` tunes BUY/SELL thresholds from validated outcomes ## Frontend integration diff --git a/backend_api_python/app/__init__.py b/backend_api_python/app/__init__.py index 41770c1..e7ca4e3 100644 --- a/backend_api_python/app/__init__.py +++ b/backend_api_python/app/__init__.py @@ -279,6 +279,12 @@ def create_app(config_name='default'): start_ai_calibration_worker() except Exception: pass + # Reflection worker: validate past decisions, run calibration periodically. + try: + from app.services.reflection import start_reflection_worker + start_reflection_worker() + except Exception: + pass restore_running_strategies() return app diff --git a/backend_api_python/app/data_sources/base.py b/backend_api_python/app/data_sources/base.py index 5eff84f..e14c953 100644 --- a/backend_api_python/app/data_sources/base.py +++ b/backend_api_python/app/data_sources/base.py @@ -4,7 +4,7 @@ """ from abc import ABC, abstractmethod from typing import Dict, List, Any, Optional -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from app.utils.logger import get_logger @@ -136,19 +136,35 @@ class BaseDataSource(ABC): klines: List[Dict[str, Any]], timeframe: str ): - """记录获取结果日志""" + """记录获取结果日志。 + + 延迟判断: + - K 线 time 为 Unix 秒(UTC),与 datetime.now(UTC) 比较,避免本地时区误差。 + - 日线/周线:最后一根通常是「上一交易日收盘」,周末/节假日可达 3~4 天, + 原先用 2×86400s(48h)会在周一早盘误报;改为日线最多容忍约 5 个自然日,周线更宽。 + """ if klines: - latest_time = datetime.fromtimestamp(klines[-1]['time']) - time_diff = (datetime.now() - latest_time).total_seconds() - # logger.info( - # f"{self.name}: {symbol} 获取 {len(klines)} 条数据, " - # f"最新时间: {latest_time}, 延迟: {time_diff:.0f}秒" - # ) - - # 检查数据是否过旧 - max_diff = TIMEFRAME_SECONDS.get(timeframe, 3600) * 2 + latest_ts = int(klines[-1]["time"]) + latest_utc = datetime.fromtimestamp(latest_ts, tz=timezone.utc) + now_utc = datetime.now(timezone.utc) + time_diff = (now_utc - latest_utc).total_seconds() + + tf_sec = TIMEFRAME_SECONDS.get(timeframe, 3600) + if tf_sec < 86400: + # 分钟/小时级:超过约 2 根 K 未更新则告警 + max_diff = tf_sec * 2 + elif tf_sec == 86400: + # 日线:覆盖周末 + 短假期(约 5 个自然日) + max_diff = 5 * 86400 + else: + # 周线:允许跨多周数据滞后 + max_diff = max(tf_sec * 2, 21 * 86400) + if time_diff > max_diff: - logger.warning(f"Warning: {symbol} data is delayed ({time_diff:.0f}s)") + logger.warning( + f"Warning: {symbol} data is delayed ({time_diff:.0f}s, " + f"latest_bar_utc={latest_utc.isoformat()}, threshold={max_diff:.0f}s, tf={timeframe})" + ) else: logger.warning(f"{self.name}: no data for {symbol}") diff --git a/backend_api_python/app/routes/fast_analysis.py b/backend_api_python/app/routes/fast_analysis.py index f66035b..2a712d1 100644 --- a/backend_api_python/app/routes/fast_analysis.py +++ b/backend_api_python/app/routes/fast_analysis.py @@ -22,6 +22,72 @@ _analysis_inflight_lock = threading.Lock() _analysis_inflight = {} # key -> expire_ts +def _try_refund_credits(user_id: int, amount: int, remark: str): + """Best-effort async refund when task fails after pre-charge.""" + try: + if int(amount or 0) <= 0: + return + billing = get_billing_service() + billing.add_credits( + user_id=int(user_id), + amount=int(amount), + action='refund', + remark=remark + ) + except Exception as e: + logger.error(f"Async auto refund failed: {e}", exc_info=True) + + +def _run_async_analysis_task(task_memory_id: int, market: str, symbol: str, language: str, + model: str, timeframe: str, user_id: int, inflight_key: str, + credits_charged: int = 0): + """ + Background worker: execute analysis and update pending history record. + """ + try: + service = get_fast_analysis_service() + memory = get_analysis_memory() + result = service.analyze( + market=market, + symbol=symbol, + language=language, + model=model, + timeframe=timeframe, + user_id=user_id + ) + memory.finalize_pending_task(task_memory_id, result) + if result.get("error"): + _try_refund_credits( + user_id=int(user_id), + amount=int(credits_charged or 0), + remark=f'Auto refund: async fast-analysis failed ({market}:{symbol}:{timeframe})' + ) + + # analyze() already stores a separate memory row; remove it to avoid duplicates. + auto_memory_id = result.get("memory_id") + if auto_memory_id and int(auto_memory_id) != int(task_memory_id): + try: + memory.delete_history(int(auto_memory_id), user_id=user_id) + except Exception: + pass + except Exception as e: + logger.error(f"Async analysis task failed: {e}", exc_info=True) + _try_refund_credits( + user_id=int(user_id), + amount=int(credits_charged or 0), + remark=f'Auto refund: async fast-analysis exception ({market}:{symbol}:{timeframe})' + ) + try: + get_analysis_memory().fail_pending_task(task_memory_id, str(e)) + except Exception: + pass + finally: + try: + _release_inflight(inflight_key) + except Exception: + pass + + def _build_inflight_key(user_id: int, market: str, symbol: str, timeframe: str) -> str: return f"{int(user_id)}|{str(market or '').strip().upper()}|{str(symbol or '').strip().upper()}|{str(timeframe or '').strip().upper()}" @@ -70,6 +136,7 @@ def analyze(): language = data.get('language', 'en-US') model = data.get('model') timeframe = data.get('timeframe', '1D') + async_submit = bool(data.get('async_submit', False)) if not market or not symbol: return jsonify({ @@ -134,6 +201,45 @@ def analyze(): logger.warning(f"Billing check failed (skipped): {e}", exc_info=True) service = get_fast_analysis_service() + + # Async submit mode: record "processing" immediately and return task id. + if async_submit: + memory = get_analysis_memory() + pending_id = memory.create_pending_task( + market=market, + symbol=symbol, + language=language, + model=model or "", + timeframe=timeframe, + user_id=user_id + ) + if not pending_id: + return jsonify({'code': 0, 'msg': 'Failed to create analysis task', 'data': None}), 500 + + t = threading.Thread( + target=_run_async_analysis_task, + args=(int(pending_id), market, symbol, language, model, timeframe, int(user_id), inflight_key, int(credits_charged or 0)), + daemon=True + ) + t.start() + # worker owns inflight release + inflight_key = None + + return jsonify({ + 'code': 1, + 'msg': 'submitted', + 'data': { + 'task_id': int(pending_id), + 'memory_id': int(pending_id), + 'status': 'processing', + 'market': market, + 'symbol': symbol, + 'timeframe': timeframe, + 'credits_charged': credits_charged, + 'remaining_credits': remaining_credits, + } + }) + result = service.analyze( market=market, symbol=symbol, diff --git a/backend_api_python/app/routes/global_market.py b/backend_api_python/app/routes/global_market.py index ca3588b..0b93802 100644 --- a/backend_api_python/app/routes/global_market.py +++ b/backend_api_python/app/routes/global_market.py @@ -424,12 +424,37 @@ def _fetch_commodities() -> List[Dict[str, Any]]: "category": "commodity" }) elif len(hist) == 1: + current = _safe_float(hist["Close"].iloc[-1], 0) + change = 0.0 + # Fallback: some futures symbols only return one row in short history windows. + try: + fast_info = getattr(ticker, "fast_info", {}) or {} + prev_close = _safe_float(fast_info.get("previousClose"), 0) + if prev_close > 0 and current > 0: + change = ((current - prev_close) / prev_close) * 100 + except Exception: + pass + if change == 0.0: + try: + info = getattr(ticker, "info", {}) or {} + # yfinance may expose either regularMarketChangePercent (ratio) + # or regularMarketChange (absolute). Prefer percent when present. + rcp = info.get("regularMarketChangePercent") + if rcp is not None: + change = _safe_float(rcp, 0) * 100 + else: + rmc = _safe_float(info.get("regularMarketChange"), 0) + prev_close = _safe_float(info.get("regularMarketPreviousClose"), 0) + if prev_close > 0: + change = (rmc / prev_close) * 100 + except Exception: + pass result.append({ "symbol": commodity["symbol"], "name_cn": commodity["name_cn"], "name_en": commodity["name_en"], - "price": round(hist["Close"].iloc[-1], 2), - "change": 0, + "price": round(current, 2), + "change": round(change, 2), "unit": commodity["unit"], "category": "commodity" }) diff --git a/backend_api_python/app/routes/indicator.py b/backend_api_python/app/routes/indicator.py index 9e3e6c1..51d4834 100644 --- a/backend_api_python/app/routes/indicator.py +++ b/backend_api_python/app/routes/indicator.py @@ -698,7 +698,18 @@ IMPORTANT: Output Python code directly, without explanations, without descriptio return content.strip() or _template_code() def stream(): - # 不扣任何 QDT:开源本地版直接生成/返回代码 + from app.services.billing_service import get_billing_service + billing = get_billing_service() + ok, msg = billing.check_and_consume( + user_id=g.user_id, + feature='ai_code_gen', + reference_id=f"ai_code_gen_{g.user_id}_{int(time.time())}" + ) + if not ok: + yield "data: " + json.dumps({"error": f"积分不足: {msg}"}, ensure_ascii=False) + "\n\n" + yield "data: [DONE]\n\n" + return + try: code_text = _generate_code_via_llm() except Exception as e: diff --git a/backend_api_python/app/routes/portfolio.py b/backend_api_python/app/routes/portfolio.py index 210dd2b..2f50100 100644 --- a/backend_api_python/app/routes/portfolio.py +++ b/backend_api_python/app/routes/portfolio.py @@ -250,20 +250,17 @@ def add_position(): with get_db_connection() as db: cur = db.cursor() + # Delete any existing positions for this symbol (regardless of side), + # ensuring only one position per symbol per user per group. + cur.execute( + "DELETE FROM qd_manual_positions WHERE user_id = ? AND market = ? AND symbol = ? AND group_name = ?", + (user_id, market, symbol, group_name) + ) cur.execute( """ INSERT INTO qd_manual_positions (user_id, market, symbol, name, side, quantity, entry_price, entry_time, notes, tags, group_name, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW()) - ON CONFLICT(user_id, market, symbol, side, group_name) DO UPDATE SET - name = excluded.name, - quantity = excluded.quantity, - entry_price = excluded.entry_price, - entry_time = excluded.entry_time, - notes = excluded.notes, - tags = excluded.tags, - group_name = excluded.group_name, - updated_at = NOW() """, (user_id, market, symbol, name, side, quantity, entry_price, entry_time, notes, tags_json, group_name) ) @@ -557,8 +554,8 @@ def add_monitor(): if monitor_type not in ('ai', 'price_alert', 'pnl_alert'): monitor_type = 'ai' - # Calculate next_run_at based on interval - interval_minutes = int(config.get('interval_minutes') or 60) + # Calculate next_run_at based on interval (frontend sends run_interval_minutes) + interval_minutes = int(config.get('run_interval_minutes') or config.get('interval_minutes') or 60) position_ids_json = json.dumps(position_ids if isinstance(position_ids, list) else [], ensure_ascii=False) config_json = json.dumps(config if isinstance(config, dict) else {}, ensure_ascii=False) @@ -616,8 +613,8 @@ def update_monitor(monitor_id): updates.append('config = ?') params.append(json.dumps(config if isinstance(config, dict) else {}, ensure_ascii=False)) - # Recalculate next_run_at if interval changed (handled separately for PostgreSQL) - next_run_interval = int(config.get('interval_minutes') or 60) + # Recalculate next_run_at if interval changed + next_run_interval = int(config.get('run_interval_minutes') or config.get('interval_minutes') or 60) if 'notification_config' in data: notification_config = data.get('notification_config') or {} diff --git a/backend_api_python/app/routes/settings.py b/backend_api_python/app/routes/settings.py index fde6b31..1b39e80 100644 --- a/backend_api_python/app/routes/settings.py +++ b/backend_api_python/app/routes/settings.py @@ -5,10 +5,12 @@ Admin-only endpoints for system configuration management. """ import os import re +import importlib from flask import Blueprint, request, jsonify from app.utils.logger import get_logger from app.utils.config_loader import clear_config_cache from app.utils.auth import login_required, admin_required +from dotenv import load_dotenv logger = get_logger(__name__) @@ -17,6 +19,55 @@ settings_bp = Blueprint('settings', __name__) # .env 文件路径 ENV_FILE_PATH = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), '.env') + +def _reload_runtime_env() -> None: + """ + Reload .env into current process so settings take effect immediately. + Priority keeps backend_api_python/.env over repo-root/.env. + """ + backend_dir = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) + root_dir = os.path.dirname(backend_dir) + + # Load root first, then backend .env to keep backend file higher priority + load_dotenv(os.path.join(root_dir, '.env'), override=True) + load_dotenv(os.path.join(backend_dir, '.env'), override=True) + + +def _refresh_runtime_services() -> None: + """ + Reset singleton services so new env/config is picked up lazily + on next request without restarting the Python process. + """ + # Prefer dedicated reset function where available. + try: + search_mod = importlib.import_module('app.services.search') + if hasattr(search_mod, 'reset_search_service'): + search_mod.reset_search_service() + except Exception as e: + logger.warning(f"reset_search_service skipped: {e}") + + # Generic singleton fields used across services. + singleton_fields = [ + ('app.services.fast_analysis', '_fast_analysis_service'), + ('app.services.billing_service', '_billing_service'), + ('app.services.security_service', '_security_service'), + ('app.services.oauth_service', '_oauth_service'), + ('app.services.user_service', '_user_service'), + ('app.services.email_service', '_email_service'), + ('app.services.community_service', '_community_service'), + ('app.services.usdt_payment_service', '_svc'), + ('app.services.usdt_payment_service', '_worker'), + ('app.services.analysis_memory', '_memory_instance'), + ] + + for module_name, field_name in singleton_fields: + try: + mod = importlib.import_module(module_name) + if hasattr(mod, field_name): + setattr(mod, field_name, None) + except Exception as e: + logger.warning(f"Singleton reset skipped: {module_name}.{field_name}: {e}") + # 配置项定义(分组)- 按功能模块划分,每个配置项包含描述 # --------------------------------------------------------------- # 精简原则: @@ -439,19 +490,75 @@ CONFIG_SCHEMA = { 'icon': 'experiment', 'order': 7, 'items': [ - { - 'key': 'ENABLE_AGENT_MEMORY', - 'label': 'Enable Agent Memory', - 'type': 'boolean', - 'default': 'True', - 'description': 'Enable AI agent memory for learning from past trades' - }, { 'key': 'ENABLE_REFLECTION_WORKER', 'label': 'Enable Auto Reflection', 'type': 'boolean', 'default': 'False', - 'description': 'Enable background worker for automatic trade reflection' + 'description': 'Enable background worker for automatic trade reflection and calibration' + }, + { + 'key': 'REFLECTION_WORKER_INTERVAL_SEC', + 'label': 'Reflection Interval (sec)', + 'type': 'number', + 'default': '86400', + 'description': 'Reflection worker run interval in seconds (86400 = 1 day)' + }, + { + 'key': 'REFLECTION_MIN_AGE_DAYS', + 'label': 'Min Age for Validation (days)', + 'type': 'number', + 'default': '7', + 'description': 'Only validate analyses older than N days' + }, + { + 'key': 'REFLECTION_VALIDATE_LIMIT', + 'label': 'Validation Batch Limit', + 'type': 'number', + 'default': '200', + 'description': 'Max records to validate per reflection cycle' + }, + { + 'key': 'ENABLE_CONFIDENCE_CALIBRATION', + 'label': 'Enable Confidence Calibration', + 'type': 'boolean', + 'default': 'False', + 'description': 'Adjust confidence by historical accuracy in each bucket' + }, + { + 'key': 'ENABLE_AI_ENSEMBLE', + 'label': 'Enable Multi-Model Voting', + 'type': 'boolean', + 'default': 'False', + 'description': 'Use 2-3 models and majority vote for more stable decisions' + }, + { + 'key': 'AI_ENSEMBLE_MODELS', + 'label': 'Ensemble Models', + 'type': 'text', + 'default': 'openai/gpt-4o,openai/gpt-4o-mini', + 'description': 'Comma-separated model IDs for ensemble voting' + }, + { + 'key': 'AI_CALIBRATION_MARKETS', + 'label': 'Calibration Markets', + 'type': 'text', + 'default': 'Crypto', + 'description': 'Comma-separated markets to run threshold calibration' + }, + { + 'key': 'AI_CALIBRATION_LOOKBACK_DAYS', + 'label': 'Calibration Lookback (days)', + 'type': 'number', + 'default': '30', + 'description': 'Days of validated data for calibration' + }, + { + 'key': 'AI_CALIBRATION_MIN_SAMPLES', + 'label': 'Calibration Min Samples', + 'type': 'number', + 'default': '80', + 'description': 'Minimum validated samples required for calibration' }, ] }, @@ -661,31 +768,17 @@ CONFIG_SCHEMA = { }, { 'key': 'BILLING_COST_AI_ANALYSIS', - 'label': 'AI Analysis Cost', + 'label': 'AI Analysis Cost (per symbol)', 'type': 'number', 'default': '10', - 'description': 'Credits per AI analysis request' + 'description': 'Credits per symbol (instant analysis, AI filter, scheduled tasks all use this price)' }, { - 'key': 'BILLING_COST_STRATEGY_RUN', - 'label': 'Strategy Run Cost', + 'key': 'BILLING_COST_AI_CODE_GEN', + 'label': 'AI Code Generation Cost', 'type': 'number', - 'default': '5', - 'description': 'Credits per strategy start' - }, - { - 'key': 'BILLING_COST_BACKTEST', - 'label': 'Backtest Cost', - 'type': 'number', - 'default': '3', - 'description': 'Credits per backtest run' - }, - { - 'key': 'BILLING_COST_PORTFOLIO_MONITOR', - 'label': 'Portfolio Monitor Cost', - 'type': 'number', - 'default': '8', - 'description': 'Credits per portfolio AI monitoring run' + 'default': '30', + 'description': 'Credits per AI strategy/indicator code generation (higher token usage)' }, { 'key': 'CREDITS_REGISTER_BONUS', @@ -873,13 +966,19 @@ def save_settings(): if write_env_file(current_env): # 清除配置缓存 clear_config_cache() + # 热重载运行时环境变量(无需重启进程) + _reload_runtime_env() + # 重置依赖配置的服务单例(下次请求自动按新配置重建) + _refresh_runtime_services() return jsonify({ 'code': 1, 'msg': 'Settings saved successfully', 'data': { 'updated_keys': list(updates.keys()), - 'requires_restart': True # 标记需要重启 + 'requires_restart': False, + 'hot_reloaded': True, + 'services_refreshed': True } }) else: diff --git a/backend_api_python/app/services/analysis_memory.py b/backend_api_python/app/services/analysis_memory.py index 1045b2e..6353775 100644 --- a/backend_api_python/app/services/analysis_memory.py +++ b/backend_api_python/app/services/analysis_memory.py @@ -67,6 +67,9 @@ class AnalysisMemory: consensus_abs DECIMAL(24, 8), agreement_ratio DECIMAL(10, 6), quality_multiplier DECIMAL(10, 6), + task_status VARCHAR(20) DEFAULT 'completed', + task_error TEXT, + updated_at TIMESTAMP DEFAULT NOW(), created_at TIMESTAMP DEFAULT NOW(), validated_at TIMESTAMP, actual_outcome VARCHAR(20), @@ -124,6 +127,27 @@ class AnalysisMemory: ) THEN ALTER TABLE qd_analysis_memory ADD COLUMN quality_multiplier DECIMAL(10, 6); END IF; + + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'qd_analysis_memory' AND column_name = 'task_status' + ) THEN + ALTER TABLE qd_analysis_memory ADD COLUMN task_status VARCHAR(20) DEFAULT 'completed'; + END IF; + + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'qd_analysis_memory' AND column_name = 'task_error' + ) THEN + ALTER TABLE qd_analysis_memory ADD COLUMN task_error TEXT; + END IF; + + IF NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_name = 'qd_analysis_memory' AND column_name = 'updated_at' + ) THEN + ALTER TABLE qd_analysis_memory ADD COLUMN updated_at TIMESTAMP DEFAULT NOW(); + END IF; END $$; """) @@ -185,14 +209,16 @@ class AnalysisMemory: INSERT INTO qd_analysis_memory ( user_id, market, symbol, decision, confidence, price_at_analysis, summary, reasons, scores, indicators_snapshot, raw_result, - consensus_score, consensus_abs, agreement_ratio, quality_multiplier + consensus_score, consensus_abs, agreement_ratio, quality_multiplier, + task_status, task_error, updated_at ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s, %s, %s) + %s, %s, %s, %s, %s, %s, NOW()) RETURNING id """, ( user_id, market, symbol, decision, confidence, price, summary, reasons, scores, indicators, raw, consensus_score, consensus_abs, agreement_ratio, quality_multiplier, + "completed", "", )) # 使用 lastrowid 属性获取 ID(execute 内部已经处理了 RETURNING) @@ -227,7 +253,8 @@ class AnalysisMemory: SELECT id, decision, confidence, price_at_analysis, summary, reasons, scores, - created_at, validated_at, was_correct, actual_return_pct + created_at, validated_at, was_correct, actual_return_pct, + task_status, task_error, updated_at FROM qd_analysis_memory WHERE market = %s AND symbol = %s AND created_at > NOW() - INTERVAL '{int(days)} days' @@ -248,7 +275,10 @@ class AnalysisMemory: "summary": row['summary'], "reasons": _safe_json_parse(row['reasons'], []), "scores": _safe_json_parse(row['scores'], {}), + "status": row.get('task_status') or 'completed', + "error_message": row.get('task_error') or '', "created_at": row['created_at'].isoformat() if row['created_at'] else None, + "updated_at": row['updated_at'].isoformat() if row.get('updated_at') else None, "was_correct": row['was_correct'], "actual_return_pct": float(row['actual_return_pct']) if row['actual_return_pct'] else None, }) @@ -292,7 +322,8 @@ class AnalysisMemory: SELECT id, market, symbol, decision, confidence, price_at_analysis, summary, reasons, scores, indicators_snapshot, raw_result, - created_at, validated_at, was_correct, actual_return_pct + created_at, validated_at, was_correct, actual_return_pct, + task_status, task_error, updated_at FROM qd_analysis_memory {where_clause} ORDER BY created_at DESC @@ -316,7 +347,10 @@ class AnalysisMemory: "scores": _safe_json_parse(row['scores'], {}), "indicators": _safe_json_parse(row['indicators_snapshot'], {}), "full_result": _safe_json_parse(row['raw_result'], None), + "status": row.get('task_status') or 'completed', + "error_message": row.get('task_error') or '', "created_at": row['created_at'].isoformat() if row['created_at'] else None, + "updated_at": row['updated_at'].isoformat() if row.get('updated_at') else None, "was_correct": row['was_correct'], "actual_return_pct": float(row['actual_return_pct']) if row['actual_return_pct'] else None, }) @@ -358,27 +392,143 @@ class AnalysisMemory: except Exception as e: logger.error(f"Failed to delete memory {memory_id}: {e}") return False + + def create_pending_task(self, market: str, symbol: str, language: str, model: str, timeframe: str, + user_id: int = None) -> Optional[int]: + """Create a processing record in history before long-running analysis starts.""" + try: + with get_db_connection() as db: + cur = db.cursor() + summary = f"Analysis submitted ({timeframe})..." + reasons = json.dumps([]) + scores = json.dumps({}) + indicators = json.dumps({}) + raw = json.dumps({ + "market": market, + "symbol": symbol, + "language": language, + "model": model, + "timeframe": timeframe, + "task_status": "processing", + }) + cur.execute(""" + INSERT INTO qd_analysis_memory ( + user_id, market, symbol, decision, confidence, + summary, reasons, scores, indicators_snapshot, raw_result, + task_status, task_error, updated_at, created_at + ) VALUES (%s, %s, %s, %s, %s, + %s, %s, %s, %s, %s, + %s, %s, NOW(), NOW()) + RETURNING id + """, ( + user_id, market, symbol, "HOLD", 0, + summary, reasons, scores, indicators, raw, + "processing", "", + )) + # PostgresCursor.execute() 会在 INSERT 时提前 fetchone() 消耗 RETURNING 结果, + # 所以这里不要再 cur.fetchone(),直接取 lastrowid。 + memory_id = cur.lastrowid + db.commit() + cur.close() + return memory_id + except Exception as e: + logger.error(f"Failed to create pending task: {e}") + return None + + def finalize_pending_task(self, memory_id: int, result: Dict[str, Any]) -> bool: + """Overwrite pending record with final analysis result.""" + try: + consensus = result.get("consensus") or {} + with get_db_connection() as db: + cur = db.cursor() + cur.execute(""" + UPDATE qd_analysis_memory + SET decision = %s, + confidence = %s, + price_at_analysis = %s, + summary = %s, + reasons = %s, + scores = %s, + indicators_snapshot = %s, + raw_result = %s, + consensus_score = %s, + consensus_abs = %s, + agreement_ratio = %s, + quality_multiplier = %s, + task_status = %s, + task_error = %s, + updated_at = NOW() + WHERE id = %s + """, ( + result.get("decision"), + result.get("confidence"), + result.get("market_data", {}).get("current_price"), + result.get("summary"), + json.dumps(result.get("reasons", [])), + json.dumps(result.get("scores", {})), + json.dumps(result.get("indicators", {})), + json.dumps(result), + consensus.get("consensus_score"), + consensus.get("consensus_abs"), + consensus.get("agreement_ratio"), + consensus.get("quality_multiplier"), + "completed" if not result.get("error") else "failed", + str(result.get("error") or ""), + int(memory_id), + )) + ok = cur.rowcount > 0 + db.commit() + cur.close() + return ok + except Exception as e: + logger.error(f"Failed to finalize pending task {memory_id}: {e}") + return False + + def fail_pending_task(self, memory_id: int, error_message: str) -> bool: + """Mark pending task as failed.""" + try: + with get_db_connection() as db: + cur = db.cursor() + cur.execute(""" + UPDATE qd_analysis_memory + SET task_status = 'failed', + task_error = %s, + summary = %s, + updated_at = NOW() + WHERE id = %s + """, ( + str(error_message or "analysis failed"), + f"Analysis failed: {str(error_message or '')}", + int(memory_id), + )) + ok = cur.rowcount > 0 + db.commit() + cur.close() + return ok + except Exception as e: + logger.error(f"Failed to mark task failed {memory_id}: {e}") + return False def get_similar_patterns(self, market: str, symbol: str, current_indicators: Dict, limit: int = 3) -> List[Dict]: """ Find historical analyses with similar technical patterns. - This is a simplified version - can be enhanced with vector similarity later. - Currently matches based on: - - Same symbol - - Similar RSI range (±10) - - Same MACD signal direction - - Validated outcomes preferred + Multi-indicator weighted similarity: + - RSI: ±15 range, weighted 0.3 + - MACD signal: exact match, weighted 0.3 + - MA trend: exact match, weighted 0.25 + - Volatility level: similar band, weighted 0.15 + - Time decay: prefer recent validated outcomes """ try: - rsi = current_indicators.get("rsi", {}).get("value", 50) - macd_signal = current_indicators.get("macd", {}).get("signal", "neutral") + rsi = float(current_indicators.get("rsi", {}).get("value") or 50) + macd_signal = str(current_indicators.get("macd", {}).get("signal") or "neutral").lower() + ma_trend = str(current_indicators.get("moving_averages", {}).get("trend") or "sideways").lower() + vol_level = str(current_indicators.get("volatility", {}).get("level") or "normal").lower() with get_db_connection() as db: cur = db.cursor() - - # Simple pattern matching query cur.execute(""" SELECT id, decision, confidence, price_at_analysis, @@ -388,49 +538,50 @@ class AnalysisMemory: WHERE market = %s AND symbol = %s AND validated_at IS NOT NULL AND was_correct IS NOT NULL - ORDER BY - CASE WHEN was_correct = true THEN 0 ELSE 1 END, - created_at DESC + ORDER BY validated_at DESC NULLS LAST, created_at DESC LIMIT %s - """, (market, symbol, limit * 2)) # Get more for filtering + """, (market, symbol, limit * 5)) rows = cur.fetchall() or [] cur.close() - results = [] + scored = [] for row in rows: - indicators = _safe_json_parse(row['indicators_snapshot'], {}) - hist_rsi = indicators.get("rsi", {}).get("value", 50) - hist_macd = indicators.get("macd", {}).get("signal", "neutral") + ind = _safe_json_parse(row['indicators_snapshot'], {}) + hist_rsi = float(ind.get("rsi", {}).get("value") or 50) + hist_macd = str(ind.get("macd", {}).get("signal") or "neutral").lower() + hist_ma = str(ind.get("moving_averages", {}).get("trend") or "sideways").lower() + hist_vol = str(ind.get("volatility", {}).get("level") or "normal").lower() - # Simple similarity check - rsi_similar = abs(hist_rsi - rsi) <= 15 - macd_similar = hist_macd == macd_signal + rsi_diff = abs(hist_rsi - rsi) + rsi_score = max(0, 1 - rsi_diff / 30) * 0.3 + macd_score = 0.3 if hist_macd == macd_signal else 0 + ma_score = 0.25 if hist_ma == ma_trend else 0 + vol_score = 0.15 if hist_vol == vol_level else (0.08 if _vol_bands_similar(vol_level, hist_vol) else 0) - if rsi_similar or macd_similar: - results.append({ - "id": row['id'], - "decision": row['decision'], - "confidence": row['confidence'], - "price": float(row['price_at_analysis']) if row['price_at_analysis'] else None, - "summary": row['summary'], - "was_correct": row['was_correct'], - "actual_return_pct": float(row['actual_return_pct']) if row['actual_return_pct'] else None, - "similarity": { - "rsi_match": rsi_similar, - "macd_match": macd_similar, - } - }) - - if len(results) >= limit: - break + sim = rsi_score + macd_score + ma_score + vol_score + if sim < 0.25: + continue + + bonus = 0.1 if row['was_correct'] else 0 + scored.append((sim + bonus, { + "id": row['id'], + "decision": row['decision'], + "confidence": row['confidence'], + "price": float(row['price_at_analysis']) if row['price_at_analysis'] else None, + "summary": row['summary'], + "was_correct": row['was_correct'], + "actual_return_pct": float(row['actual_return_pct']) if row['actual_return_pct'] else None, + "similarity_score": round(sim + bonus, 3), + })) - return results + scored.sort(key=lambda x: -x[0]) + return [p[1] for p in scored[:limit]] except Exception as e: logger.error(f"Failed to get similar patterns: {e}") return [] - + def record_feedback(self, memory_id: int, feedback: str) -> bool: """ Record user feedback on an analysis. @@ -493,8 +644,8 @@ class AnalysisMemory: for row in rows: try: - # Get current price using MarketDataCollector - current_price = collector._get_price(row['market'], row['symbol']) + price_data = collector._get_price(row['market'], row['symbol']) + current_price = float(price_data.get('price', 0)) if price_data else None if not current_price or current_price <= 0: continue analysis_price = float(row['price_at_analysis']) @@ -580,7 +731,8 @@ class AnalysisMemory: for row in rows: try: - current_price = collector._get_price(row["market"], row["symbol"]) + price_data = collector._get_price(row["market"], row["symbol"]) + current_price = float(price_data.get("price", 0)) if price_data else None if not current_price or current_price <= 0: continue analysis_price = float(row.get("price_at_analysis") or 0.0) @@ -625,6 +777,74 @@ class AnalysisMemory: return stats + def get_confidence_accuracy_by_bucket( + self, market: str = None, symbol: str = None, days: int = 90 + ) -> Dict[str, float]: + """ + Compute actual accuracy by confidence bucket for calibration. + Buckets: (50,60), (60,70), (70,80), (80,90), (90,100). + Returns e.g. {"60_70": 0.58, "70_80": 0.62} - bucket_key -> accuracy. + """ + try: + with get_db_connection() as db: + cur = db.cursor() + where = ["validated_at IS NOT NULL", "was_correct IS NOT NULL", "confidence IS NOT NULL"] + params = [] + if market: + where.append("market = %s") + params.append(market) + if symbol: + where.append("symbol = %s") + params.append(symbol) + where.append(f"created_at > NOW() - INTERVAL '{int(days)} days'") + params = tuple(params) if params else () + cur.execute(f""" + SELECT confidence, was_correct + FROM qd_analysis_memory + WHERE {' AND '.join(where)} + """, params) + rows = cur.fetchall() or [] + cur.close() + + buckets = [(50, 60), (60, 70), (70, 80), (80, 90), (90, 101)] + out = {} + for lo, hi in buckets: + subset = [r for r in rows if lo <= (r.get("confidence") or 0) < hi] + if len(subset) < 5: + continue + correct = sum(1 for r in subset if r.get("was_correct")) + out[f"{lo}_{hi}"] = correct / len(subset) + return out + except Exception as e: + logger.warning(f"get_confidence_accuracy_by_bucket failed: {e}") + return {} + + def get_adjusted_confidence( + self, raw_confidence: int, market: str = None, symbol: str = None + ) -> int: + """ + Adjust confidence based on historical accuracy in that bucket. + If model is overconfident (low actual accuracy), dampen. Underconfident -> boost slightly. + """ + buckets = [(50, 60, "50_60"), (60, 70, "60_70"), (70, 80, "70_80"), (80, 90, "80_90"), (90, 101, "90_100")] + bucket_key = None + for lo, hi, key in buckets: + if lo <= raw_confidence < hi: + bucket_key = key + break + if not bucket_key: + return max(1, min(99, int(raw_confidence))) + acc_map = self.get_confidence_accuracy_by_bucket(market=market, symbol=symbol) + acc = acc_map.get(bucket_key) + if acc is None or acc <= 0: + return max(1, min(99, int(raw_confidence))) + expected = 0.5 + (raw_confidence - 50) / 100 + if expected <= 0: + return raw_confidence + factor = acc / expected + adjusted = int(raw_confidence * factor) + return max(1, min(99, adjusted)) + def get_performance_stats(self, market: str = None, symbol: str = None, days: int = 30) -> Dict[str, Any]: """ @@ -705,6 +925,18 @@ class AnalysisMemory: } +def _vol_bands_similar(a: str, b: str) -> bool: + """Check if two volatility levels are in similar band.""" + low = {"low", "normal", "normal_low"} + high = {"high", "elevated", "volatile", "very_high"} + a, b = a.lower(), b.lower() + if a in low and b in low: + return True + if a in high and b in high: + return True + return False + + # Singleton _memory_instance = None diff --git a/backend_api_python/app/services/billing_service.py b/backend_api_python/app/services/billing_service.py index 41b5730..0d828c1 100644 --- a/backend_api_python/app/services/billing_service.py +++ b/backend_api_python/app/services/billing_service.py @@ -30,21 +30,16 @@ DEFAULT_BILLING_CONFIG = { 'enabled': False, # 是否启用计费 # 各功能积分消耗(0表示免费) - 'cost_ai_analysis': 10, # AI分析 每次消耗积分 - 'cost_strategy_run': 5, # 策略运行 每次消耗积分(启动时) - 'cost_backtest': 3, # 回测 每次消耗积分 - 'cost_portfolio_monitor': 8, # Portfolio AI监控 每次消耗积分 - 'cost_indicator_create': 0, # 创建指标 免费 - 'cost_polymarket_deep_analysis': 15, # Polymarket深度分析 每次消耗积分 + # ai_analysis 统一单价:即时分析 / AI过滤 / 定时任务 均按此单价 × 标的数扣费 + 'cost_ai_analysis': 10, + 'cost_ai_code_gen': 30, + 'cost_polymarket_deep_analysis': 15, } # Feature name mapping (for log recording) FEATURE_NAMES = { 'ai_analysis': 'AI Analysis', - 'strategy_run': 'Strategy Run', - 'backtest': 'Backtest', - 'portfolio_monitor': 'Portfolio Monitor', - 'indicator_create': 'Indicator Create', + 'ai_code_gen': 'AI Code Generation', 'polymarket_deep_analysis': 'Polymarket Deep Analysis', } @@ -458,7 +453,7 @@ class BillingService: Args: user_id: 用户ID - feature: 功能名称(ai_analysis/strategy_run/backtest/portfolio_monitor等) + feature: 功能名称(ai_analysis / polymarket_deep_analysis) reference_id: 关联ID(可选) Returns: @@ -716,12 +711,10 @@ class BillingService: 'is_vip': is_vip, 'vip_expires_at': vip_expires_at.isoformat() if vip_expires_at else None, 'billing_enabled': config.get('enabled', False), - # 功能费用(供前端显示) 'feature_costs': { 'ai_analysis': config.get('cost_ai_analysis', 0), - 'strategy_run': config.get('cost_strategy_run', 0), - 'backtest': config.get('cost_backtest', 0), - 'portfolio_monitor': config.get('cost_portfolio_monitor', 0), + 'ai_code_gen': config.get('cost_ai_code_gen', 0), + 'polymarket_deep_analysis': config.get('cost_polymarket_deep_analysis', 0), } } diff --git a/backend_api_python/app/services/fast_analysis.py b/backend_api_python/app/services/fast_analysis.py index 6b93841..605e572 100644 --- a/backend_api_python/app/services/fast_analysis.py +++ b/backend_api_python/app/services/fast_analysis.py @@ -10,8 +10,9 @@ Fast Analysis Service 3.0 """ import json import os +import re import time -from typing import Dict, Any, Optional, List +from typing import Dict, Any, Optional, List, Tuple from decimal import Decimal, ROUND_HALF_UP from app.utils.logger import get_logger @@ -21,6 +22,167 @@ from app.services.market_data_collector import get_market_data_collector logger = get_logger(__name__) +def _safe_float_price(value: Any, default: Optional[float] = None) -> Optional[float]: + """Coerce LLM/string prices to float; invalid -> default.""" + if value is None: + return default + if isinstance(value, (int, float)): + if isinstance(value, float) and (value != value): # NaN + return default + return float(value) + try: + s = str(value).strip().replace(",", "") + if not s: + return default + return float(s) + except (TypeError, ValueError): + return default + + +def _build_trend_outlook_summary(trend_outlook: Dict[str, Any], language: str) -> str: + """Human-readable multi-horizon outlook for API / legacy clients.""" + if not trend_outlook: + return "" + is_zh = str(language or "").lower().startswith("zh") + + def _lbl(trend: str) -> str: + t = str(trend or "HOLD").upper() + if is_zh: + return {"BUY": "看多", "SELL": "看空", "HOLD": "震荡/中性"}.get(t, "震荡/中性") + return {"BUY": "bullish", "SELL": "bearish", "HOLD": "neutral / range"}.get(t, "neutral / range") + + n24 = trend_outlook.get("next_24h") or {} + d3 = trend_outlook.get("next_3d") or {} + w1 = trend_outlook.get("next_1w") or {} + m1 = trend_outlook.get("next_1m") or {} + + if is_zh: + parts = [ + f"约24小时:{_lbl(n24.get('trend'))}(强度 {n24.get('strength', 'neutral')})", + f"约3天:{_lbl(d3.get('trend'))}(强度 {d3.get('strength', 'neutral')})", + f"约1周:{_lbl(w1.get('trend'))}(强度 {w1.get('strength', 'neutral')})", + f"约1月:{_lbl(m1.get('trend'))}(强度 {m1.get('strength', 'neutral')})", + ] + return ";".join(parts) + parts = [ + f"~24h: {_lbl(n24.get('trend'))} ({n24.get('strength', 'neutral')})", + f"~3d: {_lbl(d3.get('trend'))} ({d3.get('strength', 'neutral')})", + f"~1w: {_lbl(w1.get('trend'))} ({w1.get('strength', 'neutral')})", + f"~1m: {_lbl(m1.get('trend'))} ({m1.get('strength', 'neutral')})", + ] + return " | ".join(parts) + + +# ----------------------------------------------------------------------------- +# Geopolitical / major-conflict detection (word boundaries + tiers) +# Avoid false positives: "war" in "toward/award", "tension" in "extension", +# "us" in "focus/status", bare country names without conflict context, etc. +# ----------------------------------------------------------------------------- +_GEO_SEVERE_PATTERNS: List[re.Pattern] = [ + re.compile(r"\b(?:war|wars|warfare|wartime)\b", re.I), + re.compile(r"\b(?:invasion|invaded|invading|invade)\b", re.I), + re.compile(r"\b(?:airstrike|air\s*strikes?|missile\s+strike|drone\s+strike)\b", re.I), + re.compile(r"\b(?:military\s+attack|armed\s+attack|troops?\s+(?:fire|attack|invade))\b", re.I), + re.compile(r"\b(?:declare[sd]?\s+war|state\s+of\s+war|act\s+of\s+war)\b", re.I), + re.compile(r"\b(?:martial\s+law|military\s+coup|coup\s+d['\u2019]?etat)\b", re.I), + re.compile(r"\b(?:terror(?:ist)?\s+attack|mass\s+shooting\s+at)\b", re.I), +] +_GEO_MODERATE_PATTERNS: List[re.Pattern] = [ + re.compile(r"\bgeopolitical\b", re.I), + re.compile(r"\b(?:armed|military)\s+conflict\b", re.I), + re.compile(r"\b(?:international\s+)?sanctions?\s+(?:on|against|targeting|hit)\b", re.I), + re.compile(r"\b(?:naval\s+blockade|border\s+clash|ceasefire\s+(?:broken|violated))\b", re.I), + re.compile(r"\b(?:evacuat\w+\s+(?:the\s+)?embassy|embassy\s+evacuation)\b", re.I), + re.compile(r"\b(?:nuclear\s+(?:threat|strike|weapon)|nuclear\s+war)\b", re.I), +] +# "Crisis" / "tension" only in clearly geopolitical phrases (not substring of "extension") +_GEO_CONTEXT_MODERATE: List[re.Pattern] = [ + re.compile(r"\b(?:geopolitical|diplomatic|border)\s+(?:crisis|tension|standoff)\b", re.I), + re.compile(r"\b(?:tensions?\s+(?:rise|escalat|flare|mount)\s+(?:with|between))\b", re.I), + re.compile(r"\b(?:middle\s+east|south\s+china\s+sea|taiwan\s+strait)\s+(?:crisis|tension|conflict)\b", re.I), +] +_GEO_ZH_SEVERE = ( + "宣战", "战争爆发", "全面战争", "武装冲突", "军事打击", "军事入侵", "空袭", "导弹袭击", + "开战", "交火", "战火", +) +_GEO_ZH_MODERATE = ( + "地缘政治危机", "国际制裁升级", "断交", "撤侨", "军事对峙", "地区冲突升级", +) + +# Optional: country/region + conflict verb (single pattern, avoids "NYSE" noise) +_GEO_REGION_CONFLICT: List[re.Pattern] = [ + re.compile( + r"\b(?:russia|ukraine|iran|israel|gaza|hamas|taiwan|north\s+korea|dprk|" + r"syria|yemen|lebanon|nato)\b.{0,40}\b(?:invade|attack|strike|war|conflict|sanction)\b", + re.I, + ), + re.compile( + r"\b(?:invade|attack|strike|war|conflict|sanction)\b.{0,40}\b(?:russia|ukraine|iran|israel|" + r"gaza|hamas|taiwan|north\s+korea|dprk|syria|nato)\b", + re.I, + ), +] + +_GEO_MAJOR_NEWS_SEVERE = [ + re.compile(r"\b(?:war|wars|warfare)\b", re.I), + re.compile(r"\b(?:invasion|invaded|military\s+attack|airstrike)\b", re.I), + re.compile(r"\b(?:armed\s+conflict|military\s+conflict)\b", re.I), +] + + +def _geopolitical_match_level(combined_text: str) -> Tuple[str, Optional[str]]: + """ + Returns (level, reason_tag) where level is 'none'|'severe'|'moderate'. + combined_text: title + summary (original case OK; English patterns use lower via regex I flag). + """ + if not combined_text or len(combined_text.strip()) < 4: + return "none", None + low = combined_text.lower() + for pat in _GEO_SEVERE_PATTERNS: + if pat.search(low): + return "severe", pat.pattern[:48] + for z in _GEO_ZH_SEVERE: + if z in combined_text: + return "severe", z + for pat in _GEO_REGION_CONFLICT: + if pat.search(low): + return "severe", "region+conflict" + for pat in _GEO_MODERATE_PATTERNS: + if pat.search(low): + return "moderate", pat.pattern[:48] + for pat in _GEO_CONTEXT_MODERATE: + if pat.search(low): + return "moderate", pat.pattern[:48] + for z in _GEO_ZH_MODERATE: + if z in combined_text: + return "moderate", z + return "none", None + + +def _geopolitical_sentiment_penalty_delta(level: str) -> int: + if level == "severe": + return -42 + if level == "moderate": + return -18 + return 0 + + +def _is_major_geopolitical_news_text(combined_text: str) -> bool: + """Stricter than sentiment: only clear conflict / war signals for _has_major_news.""" + if not combined_text: + return False + low = combined_text.lower() + for pat in _GEO_MAJOR_NEWS_SEVERE: + if pat.search(low): + return True + for z in _GEO_ZH_SEVERE: + if z in combined_text: + return True + if any(p.search(low) for p in _GEO_REGION_CONFLICT): + return True + return False + + class FastAnalysisService: """ 快速分析服务 3.0 @@ -364,10 +526,12 @@ You are CONSERVATIVE and OBJECTIVE. Your analysis must be based on DATA, not spe ⚠️ CRITICAL PRICE RULES: 1. Current price: ${current_price} -2. Your stop_loss MUST be near ${suggested_stop_loss:.4f} (range: ${price_lower_bound:.4f} ~ ${current_price}) -3. Your take_profit MUST be near ${suggested_take_profit:.4f} (range: ${current_price} ~ ${price_upper_bound:.4f}) -4. Entry price: ${entry_range_low:.4f} ~ ${entry_range_high:.4f} -5. These levels are based on ATR and support/resistance analysis - use them as reference! +2. If decision=BUY: stop_loss should be below current price, take_profit above current price. +3. If decision=SELL (short): stop_loss MUST be above current price; take_profit MUST be below current price. +4. BUY stop_loss reference: near ${suggested_stop_loss:.4f} (range: ${price_lower_bound:.4f} ~ ${current_price}) +5. BUY take_profit reference: near ${suggested_take_profit:.4f} (range: ${current_price} ~ ${price_upper_bound:.4f}) +6. Entry price: ${entry_range_low:.4f} ~ ${entry_range_high:.4f} +7. These levels are based on ATR and support/resistance analysis - use them as reference! 📊 YOUR ANALYSIS MUST INCLUDE (ALL factors are important): 1. **Technical Analysis**: Objectively interpret RSI, MACD, MA, support/resistance. Be honest about conflicting signals. @@ -500,6 +664,9 @@ When the score is neutral (-20 to +20), you can use your judgment, but still con 📈 EARNINGS DATA: {self._format_earnings_data(fundamental.get('earnings', {}))} +📚 HISTORICAL PATTERNS (similar conditions in the past): +{self._get_memory_context(data.get('market', ''), data.get('symbol', ''), indicators)} + IMPORTANT: 1. **CRITICAL**: Check for GEOPOLITICAL EVENTS (wars, conflicts, military actions) in the news section. These events have HIGHEST PRIORITY and can override all technical indicators. 2. Consider the macro environment (especially DXY, VIX, rates, geopolitical events) when making your recommendation. @@ -817,6 +984,55 @@ IMPORTANT: weighted_score_sum += overall_score * w weighted_score_w_sum += w + # Extra horizon score (not used in consensus override): + # add 1W objective score for short/medium trend outlook. + if "1W" not in objective_by_tf: + try: + d_1w = self._collect_market_data( + market, + symbol, + "1W", + include_macro=False, + include_news=False, + include_polymarket=False, + timeout=25, + ) + cp_1w = _extract_current_price(d_1w) or 0.0 + obj_1w = self._calculate_objective_score(d_1w, cp_1w) + sc_1w = float(obj_1w.get("overall_score", 0.0) or 0.0) + objective_by_tf["1W"] = { + "objective_score": obj_1w, + "overall_score": sc_1w, + "decision": self._score_to_decision(sc_1w, market=market), + "abs_score": abs(sc_1w), + } + except Exception as e: + logger.debug(f"1W outlook score skipped: {e}") + + # Short-horizon outlook: 1H bar (24h-style), not 1D close + if "1H" not in objective_by_tf: + try: + d_1h = self._collect_market_data( + market, + symbol, + "1H", + include_macro=False, + include_news=False, + include_polymarket=False, + timeout=18, + ) + cp_1h = _extract_current_price(d_1h) or 0.0 + obj_1h = self._calculate_objective_score(d_1h, cp_1h) + sc_1h = float(obj_1h.get("overall_score", 0.0) or 0.0) + objective_by_tf["1H"] = { + "objective_score": obj_1h, + "overall_score": sc_1h, + "decision": self._score_to_decision(sc_1h, market=market), + "abs_score": abs(sc_1h), + } + except Exception as e: + logger.debug(f"1H outlook score skipped: {e}") + consensus_score = weighted_score_sum / weighted_score_w_sum if weighted_score_w_sum > 0 else 0.0 consensus_decision = self._score_to_decision(consensus_score, market=market) consensus_abs = abs(consensus_score) @@ -892,32 +1108,52 @@ IMPORTANT: # Phase 2: Build prompt system_prompt, user_prompt = self._build_analysis_prompt(data, language) - - # Phase 3: Single LLM call - logger.info(f"Calling LLM for analysis...") + + default_struct = { + "decision": "HOLD", + "confidence": 50, + "summary": "Analysis failed", + "entry_price": current_price, + "stop_loss": current_price * 0.95, + "take_profit": current_price * 1.05, + "position_size_pct": 10, + "timeframe": "medium", + "key_reasons": ["Unable to analyze"], + "risks": ["Analysis error"], + "technical_score": 50, + "fundamental_score": 50, + "sentiment_score": 50, + } + + # Phase 3: LLM call(s) - single or ensemble voting + logger.info("Calling LLM for analysis...") llm_start = time.time() - - analysis = self.llm_service.safe_call_llm( - system_prompt, - user_prompt, - default_structure={ - "decision": "HOLD", - "confidence": 50, - "summary": "Analysis failed", - "entry_price": current_price, - "stop_loss": current_price * 0.95, - "take_profit": current_price * 1.05, - "position_size_pct": 10, - "timeframe": "medium", - "key_reasons": ["Unable to analyze"], - "risks": ["Analysis error"], - "technical_score": 50, - "fundamental_score": 50, - "sentiment_score": 50, - }, - model=model - ) - + ensemble_models = [] + if os.getenv("ENABLE_AI_ENSEMBLE", "false").lower() == "true": + env_models = (os.getenv("AI_ENSEMBLE_MODELS") or "").strip() + if env_models: + ensemble_models = [m.strip() for m in env_models.split(",") if m.strip()] + + if len(ensemble_models) >= 2: + analyses_list = [] + for em in ensemble_models[:3]: + a = self.llm_service.safe_call_llm( + system_prompt, user_prompt, default_structure=default_struct, model=em + ) + analyses_list.append(a) + decisions = [str(a.get("decision", "HOLD") or "HOLD").upper() for a in analyses_list] + from collections import Counter + vote = Counter(decisions).most_common(1)[0][0] + idx = decisions.index(vote) + analysis = analyses_list[idx].copy() + analysis["decision"] = vote + analysis["_ensemble_vote"] = dict(Counter(decisions)) + analysis["_ensemble_models"] = ensemble_models[:3] + else: + analysis = self.llm_service.safe_call_llm( + system_prompt, user_prompt, default_structure=default_struct, model=model + ) + llm_time = int((time.time() - llm_start) * 1000) logger.info(f"LLM call completed in {llm_time}ms") @@ -932,6 +1168,50 @@ IMPORTANT: score_based_decision = self._score_to_decision(objective_score["overall_score"], market=market) llm_decision = str(analysis.get("decision", "HOLD") or "HOLD").upper() + # Horizon trend outlook for users (short/medium/long decision reference) + score_1d = float((objective_by_tf.get("1D") or {}).get("overall_score", objective_score.get("overall_score", 0.0)) or 0.0) + score_4h = float((objective_by_tf.get("4H") or {}).get("overall_score", score_1d) or score_1d) + score_1h = float((objective_by_tf.get("1H") or {}).get("overall_score", score_4h) or score_4h) + # ~24h: prefer 1H bar objective; fall back 4H -> 1D + score_24h = float(score_1h) + score_1w = float((objective_by_tf.get("1W") or {}).get("overall_score", score_1d) or score_1d) + score_3d = score_1d * 0.7 + score_4h * 0.3 + score_1m = score_1w * 0.55 + float(objective_score.get("fundamental_score", 0.0)) * 0.30 + float(objective_score.get("macro_score", 0.0)) * 0.15 + + def _trend_strength(score_val: float) -> str: + a = abs(float(score_val)) + if a >= 70: + return "strong" + if a >= 40: + return "moderate" + if a >= 20: + return "mild" + return "neutral" + + trend_outlook = { + "next_24h": { + "score": round(score_24h, 2), + "trend": self._score_to_decision(score_24h, market=market), + "strength": _trend_strength(score_24h), + }, + "next_3d": { + "score": round(score_3d, 2), + "trend": self._score_to_decision(score_3d, market=market), + "strength": _trend_strength(score_3d), + }, + "next_1w": { + "score": round(score_1w, 2), + "trend": self._score_to_decision(score_1w, market=market), + "strength": _trend_strength(score_1w), + }, + "next_1m": { + "score": round(score_1m, 2), + "trend": self._score_to_decision(score_1m, market=market), + "strength": _trend_strength(score_1m), + }, + } + trend_outlook_summary = _build_trend_outlook_summary(trend_outlook, language) + # Consensus confidence: consensus_conf = int(max(40, min(98, 50 + consensus_abs * 0.35))) # Agreement boosts, disagreement reduces @@ -942,6 +1222,9 @@ IMPORTANT: cfg = self._get_ai_calibration(market=market) min_abs_override = float(cfg.get("min_consensus_abs_override") or 15.0) quality_hold_thr = float(cfg.get("quality_hold_threshold") or 0.7) + regime = self._detect_market_regime(data.get("indicators") or {}) + if regime == "ranging": + min_abs_override *= 1.2 if consensus_abs >= min_abs_override: final_decision = consensus_decision @@ -953,11 +1236,21 @@ IMPORTANT: analysis["decision"] = final_decision analysis["confidence"] = consensus_conf original_summary = analysis.get("summary", "") - level = "强烈" if consensus_abs >= 70 else "明显" if consensus_abs >= 40 else "轻微" - analysis["summary"] = ( - f"{original_summary} [多周期客观共识:综合评分{consensus_score:.1f}分(" - f"{level}{'利多' if consensus_score > 0 else '利空'}),建议{final_decision}]" - ) + is_zh = str(language or "").lower().startswith("zh") + if is_zh: + level = "强烈" if consensus_abs >= 70 else "明显" if consensus_abs >= 40 else "轻微" + bias = "利多" if consensus_score > 0 else "利空" + consensus_note = ( + f"[多周期客观共识:综合评分{consensus_score:.1f}分({level}{bias}),建议{final_decision}]" + ) + else: + level = "strong" if consensus_abs >= 70 else "moderate" if consensus_abs >= 40 else "mild" + bias = "bullish" if consensus_score > 0 else "bearish" + consensus_note = ( + f"[Multi-timeframe objective consensus: score {consensus_score:.1f} " + f"({level} {bias}), suggested decision {final_decision}]" + ) + analysis["summary"] = f"{original_summary} {consensus_note}".strip() else: # Near-neutral: keep LLM but shrink confidence by quality and enforce HOLD if quality is poor analysis["confidence"] = int(max(0, min(100, int(analysis.get("confidence", 50) or 50) * quality_multiplier))) @@ -983,6 +1276,7 @@ IMPORTANT: "consensus_abs": consensus_abs, "agreement_ratio": agreement_ratio, "quality_multiplier": quality_multiplier, + "market_regime": regime, } # Phase 5: Validate and constrain output (pass indicators for decision validation) @@ -1014,6 +1308,17 @@ IMPORTANT: except Exception: # Keep model-provided position_size_pct pass + + # Confidence calibration: adjust by historical accuracy in bucket + if os.getenv("ENABLE_CONFIDENCE_CALIBRATION", "false").lower() == "true": + try: + from app.services.analysis_memory import get_analysis_memory + raw_conf = int(analysis.get("confidence", 50) or 50) + analysis["confidence"] = get_analysis_memory().get_adjusted_confidence( + raw_conf, market=market, symbol=symbol + ) + except Exception as e: + logger.debug(f"Confidence calibration skipped: {e}") # Build final result total_time = int((time.time() - start_time) * 1000) @@ -1041,6 +1346,15 @@ IMPORTANT: "take_profit": analysis.get("take_profit"), "position_size_pct": analysis.get("position_size_pct", 10), "timeframe": analysis.get("timeframe", "medium"), + # camelCase + 语义别名:供私有前端/旧版组件绑定(勿用 indicators.trading_levels 充当计划) + "entryPrice": analysis.get("entry_price"), + "stopLoss": analysis.get("stop_loss"), + "takeProfit": analysis.get("take_profit"), + "positionSizePct": analysis.get("position_size_pct", 10), + "decision": str(analysis.get("decision", "HOLD") or "HOLD").upper(), + # 与 stop_loss / take_profit 数值相同;命名强调「亏损离场 / 盈利目标」避免与多单参考线混淆 + "loss_exit_price": analysis.get("stop_loss"), + "profit_target_price": analysis.get("take_profit"), }, "reasons": analysis.get("key_reasons", []), "risks": analysis.get("risks", []), @@ -1060,6 +1374,10 @@ IMPORTANT: }, "indicators": data.get("indicators", {}), "consensus": analysis.get("consensus", {}), + "trend_outlook": trend_outlook, + "trend_outlook_summary": trend_outlook_summary, + "trendOutlook": trend_outlook, + "trendOutlookSummary": trend_outlook_summary, "analysis_time_ms": total_time, "llm_time_ms": llm_time, "data_collection_time_ms": data.get("collection_time_ms", 0), @@ -1149,51 +1467,45 @@ IMPORTANT: """ 检查是否有重大新闻事件。 重大新闻包括:监管变化、重大合作、丑闻、重大政策、地缘政治事件等。 + 地缘类使用词边界与分级,避免 toward/extension/us 等子串误判。 """ if not news_data: return False - - # 检查新闻标题中的关键词(扩展了地缘政治相关关键词) + + # 子串关键词(较长词或中文,避免过短英文误匹配) major_keywords = [ - # 监管和政策 - "regulation", "regulatory", "ban", "approval", "policy", "government", "central bank", + "regulation", "regulatory", "approval", "policy", "government", "central bank", "监管", "禁令", "批准", "政策", "政府", "央行", - # 商业事件 "partnership", "merger", "acquisition", "scandal", "lawsuit", "investigation", "合作", "合并", "收购", "丑闻", "诉讼", "调查", - # 地缘政治事件(新增) - "war", "conflict", "military", "attack", "strike", "sanctions", "tension", "crisis", - "geopolitical", "iran", "israel", "russia", "ukraine", "china", "taiwan", "north korea", - "middle east", "gulf", "nato", "united states", "us", "usa", "america", - "战争", "冲突", "军事", "袭击", "打击", "制裁", "紧张", "危机", - "地缘政治", "伊朗", "以色列", "俄罗斯", "乌克兰", "中国", "台湾", "朝鲜", - "中东", "海湾", "北约", "美国" + "sanctions", "embargo", "制裁", "中东", "海湾", "北约", + "united states", "middle east", ] - - for news in news_data[:10]: # 检查前10条最新新闻(增加检查范围) - title = (news.get("title") or news.get("headline") or "").lower() - summary = (news.get("summary") or "").lower() + # 短英文词用词边界匹配(不用裸子串) + major_short_patterns = [ + re.compile(r"\b(?:ban|banned|banning)\b", re.I), + re.compile(r"\b(?:crisis|crises)\b", re.I), + re.compile(r"\b(?:catastrophe|meltdown)\b", re.I), + ] + + for news in news_data[:10]: + title = news.get("title") or news.get("headline") or "" + summary = news.get("summary") or "" sentiment = news.get("sentiment", "neutral") - - # 检查标题和摘要中是否包含重大关键词 text_to_check = f"{title} {summary}" - - # 地缘政治事件通常很严重,即使情绪是中性也要识别 - geopolitical_keywords = [ - "war", "conflict", "military", "attack", "strike", "geopolitical", - "战争", "冲突", "军事", "袭击", "打击", "地缘政治" - ] - - # 如果是地缘政治相关,直接认为是重大新闻 - if any(keyword in text_to_check for keyword in geopolitical_keywords): - logger.info(f"Detected major geopolitical event in news: {title[:60]}") + low = text_to_check.lower() + + if _is_major_geopolitical_news_text(text_to_check): + logger.info(f"Detected major geopolitical event in news: {low[:80]}") return True - - # 其他重大关键词且情绪强烈(非中性),认为是重大新闻 - if any(keyword in text_to_check for keyword in major_keywords) and sentiment != "neutral": - logger.info(f"Detected major news event: {title[:60]}") + + if any(kw in low for kw in major_keywords) and sentiment != "neutral": + logger.info(f"Detected major news event: {low[:80]}") return True - + if sentiment != "neutral" and any(p.search(low) for p in major_short_patterns): + logger.info(f"Detected major news event (pattern): {low[:80]}") + return True + return False def _has_macro_event(self, macro_data: Dict, market: str) -> bool: @@ -1227,6 +1539,88 @@ IMPORTANT: return False + def _finalize_trading_plan_for_decision( + self, analysis: Dict, current_price: float, indicators: Optional[Dict] = None + ) -> Dict: + """ + After decision is final: force correct stop/take-profit geometry and mirror long levels for shorts. + BUY: stop_loss < current < take_profit + SELL: take_profit < current < stop_loss (short: stop above, TP below) + """ + if not current_price or current_price <= 0: + return analysis + indicators = indicators or {} + decision = str(analysis.get("decision", "HOLD")).upper() + if decision not in ("BUY", "SELL"): + return analysis + + min_price = current_price * 0.90 + max_price = current_price * 1.10 + eps = max(abs(current_price) * 1e-6, 1e-8) + + tl = indicators.get("trading_levels") or {} + sl_long = _safe_float_price(tl.get("suggested_stop_loss")) + tp_long = _safe_float_price(tl.get("suggested_take_profit")) + long_ok = ( + sl_long is not None + and tp_long is not None + and sl_long < current_price - eps + and tp_long > current_price + eps + ) + + if decision == "SELL": + if long_ok: + mirrored_sl = round(2 * current_price - sl_long, 6) + mirrored_tp = round(2 * current_price - tp_long, 6) + mirrored_sl = min(max(mirrored_sl, current_price + eps), max_price) + mirrored_tp = max(min(mirrored_tp, current_price - eps), min_price) + if mirrored_sl > current_price and mirrored_tp < current_price: + analysis["stop_loss"] = mirrored_sl + analysis["take_profit"] = mirrored_tp + else: + analysis["stop_loss"] = round(min(max_price, current_price * 1.05), 6) + analysis["take_profit"] = round(max(min_price, current_price * 0.95), 6) + else: + sl_f = _safe_float_price(analysis.get("stop_loss")) + tp_f = _safe_float_price(analysis.get("take_profit")) + if sl_f is not None and tp_f is not None and tp_f < current_price < sl_f: + analysis["stop_loss"] = round(min(max(sl_f, current_price + eps), max_price), 6) + analysis["take_profit"] = round(max(min(tp_f, current_price - eps), min_price), 6) + else: + analysis["stop_loss"] = round(min(max_price, current_price * 1.05), 6) + analysis["take_profit"] = round(max(min_price, current_price * 0.95), 6) + else: # BUY + if long_ok: + sl = max(min(sl_long, current_price - eps), min_price) + tp = min(max(tp_long, current_price + eps), max_price) + analysis["stop_loss"] = round(sl, 6) + analysis["take_profit"] = round(tp, 6) + else: + sl_f = _safe_float_price(analysis.get("stop_loss")) + tp_f = _safe_float_price(analysis.get("take_profit")) + if sl_f is not None and tp_f is not None and sl_f < current_price < tp_f: + analysis["stop_loss"] = round(max(min(sl_f, current_price - eps), min_price), 6) + analysis["take_profit"] = round(min(max(tp_f, current_price + eps), max_price), 6) + else: + analysis["stop_loss"] = round(max(min_price, current_price * 0.95), 6) + analysis["take_profit"] = round(min(max_price, current_price * 1.05), 6) + + # Last-resort: fix inverted or equal levels + sl_f = _safe_float_price(analysis.get("stop_loss"), current_price) + tp_f = _safe_float_price(analysis.get("take_profit"), current_price) + if sl_f is None or tp_f is None: + return analysis + if decision == "SELL": + if not (tp_f < current_price < sl_f): + analysis["stop_loss"] = round(min(max_price, current_price * 1.05), 6) + analysis["take_profit"] = round(max(min_price, current_price * 0.95), 6) + else: + if not (sl_f < current_price < tp_f): + analysis["stop_loss"] = round(max(min_price, current_price * 0.95), 6) + analysis["take_profit"] = round(min(max_price, current_price * 1.05), 6) + + return analysis + def _validate_and_constrain(self, analysis: Dict, current_price: float, indicators: Dict = None, has_major_news: bool = False, has_macro_event: bool = False) -> Dict: """ @@ -1239,22 +1633,45 @@ IMPORTANT: # Price bounds min_price = current_price * 0.90 max_price = current_price * 1.10 + decision = str(analysis.get("decision", "HOLD")).upper() # Constrain entry price - entry = analysis.get("entry_price", current_price) - if entry and (entry < min_price or entry > max_price): + entry = _safe_float_price(analysis.get("entry_price"), current_price) + if entry is not None and (entry < min_price or entry > max_price): logger.warning(f"Entry price {entry} out of bounds, constraining to current price {current_price}") analysis["entry_price"] = round(current_price, 6) + elif entry is not None: + analysis["entry_price"] = round(entry, 6) - # Constrain stop loss - stop_loss = analysis.get("stop_loss", current_price * 0.95) - if stop_loss and (stop_loss < min_price or stop_loss > current_price): - analysis["stop_loss"] = round(current_price * 0.95, 6) - - # Constrain take profit - take_profit = analysis.get("take_profit", current_price * 1.05) - if take_profit and (take_profit < current_price or take_profit > max_price): - analysis["take_profit"] = round(current_price * 1.05, 6) + # Constrain stop loss / take profit by direction (numeric-safe). + # BUY: stop_loss < current < take_profit + # SELL: take_profit < current < stop_loss + if decision == "SELL": + stop_default = round(current_price * 1.05, 6) + tp_default = round(current_price * 0.95, 6) + stop_loss = _safe_float_price(analysis.get("stop_loss"), stop_default) + take_profit = _safe_float_price(analysis.get("take_profit"), tp_default) + if stop_loss is None or stop_loss <= current_price or stop_loss > max_price: + analysis["stop_loss"] = stop_default + else: + analysis["stop_loss"] = round(stop_loss, 6) + if take_profit is None or take_profit >= current_price or take_profit < min_price: + analysis["take_profit"] = tp_default + else: + analysis["take_profit"] = round(take_profit, 6) + else: + stop_default = round(current_price * 0.95, 6) + tp_default = round(current_price * 1.05, 6) + stop_loss = _safe_float_price(analysis.get("stop_loss"), stop_default) + take_profit = _safe_float_price(analysis.get("take_profit"), tp_default) + if stop_loss is None or stop_loss < min_price or stop_loss >= current_price: + analysis["stop_loss"] = stop_default + else: + analysis["stop_loss"] = round(stop_loss, 6) + if take_profit is None or take_profit <= current_price or take_profit > max_price: + analysis["take_profit"] = tp_default + else: + analysis["take_profit"] = round(take_profit, 6) # Constrain confidence confidence = analysis.get("confidence", 50) @@ -1266,7 +1683,6 @@ IMPORTANT: analysis[score_key] = max(0, min(100, int(score))) # Validate decision - decision = str(analysis.get("decision", "HOLD")).upper() if decision not in ["BUY", "SELL", "HOLD"]: analysis["decision"] = "HOLD" else: @@ -1279,6 +1695,9 @@ IMPORTANT: has_major_news=has_major_news, has_macro_event=has_macro_event ) + + # Final geometry after any decision change (e.g. forced HOLD skips finalize in caller — still safe) + analysis = self._finalize_trading_plan_for_decision(analysis, current_price, indicators) return analysis @@ -1729,71 +2148,64 @@ IMPORTANT: def _calculate_sentiment_score(self, news: List[Dict]) -> float: """ 计算新闻情绪评分 (-100 to +100) - 包含地缘政治事件的特殊处理 + 地缘/冲突类:词边界 + 分级惩罚,单条封顶,避免 extension/toward 等误判叠加。 """ if not news: return 0.0 # 无新闻,中性 - + positive_count = 0 negative_count = 0 neutral_count = 0 - geopolitical_penalty = 0 # 地缘政治事件惩罚分数 - geopolitical_count = 0 # 地缘政治事件数量 - - # 地缘政治关键词 - geopolitical_keywords = [ - "war", "conflict", "military", "attack", "strike", "sanctions", - "geopolitical", "crisis", "tension", "iran", "israel", "russia", - "ukraine", "middle east", "nato", "united states", - "战争", "冲突", "军事", "袭击", "制裁", "地缘政治", "危机" - ] - - for item in news[:15]: # 检查前15条新闻 - title = (item.get("headline") or item.get("title") or "").lower() - summary = (item.get("summary") or "").lower() + geopolitical_penalty = 0 + max_geo_total = int(os.getenv("SENTIMENT_GEO_PENALTY_CAP", "-55")) + + for item in news[:15]: + title = item.get("headline") or item.get("title") or "" + summary = item.get("summary") or "" text = f"{title} {summary}" sentiment = item.get("sentiment", "neutral") is_global_event = item.get("is_global_event", False) - - # 检查是否是地缘政治事件 - is_geopolitical = is_global_event or any(keyword in text for keyword in geopolitical_keywords) - - if is_geopolitical: - geopolitical_count += 1 - # 地缘政治事件通常是利空的,给予严重惩罚 - if any(kw in text for kw in ["war", "conflict", "attack", "strike", "战争", "冲突", "袭击", "打击"]): - geopolitical_penalty -= 50 # 战争/冲突事件严重利空 - elif any(kw in text for kw in ["sanctions", "crisis", "tension", "制裁", "危机", "紧张"]): - geopolitical_penalty -= 30 # 制裁/危机事件利空 - else: - geopolitical_penalty -= 20 # 其他地缘政治事件利空 - logger.info(f"Detected geopolitical event in sentiment scoring: {title[:60]}, penalty: {geopolitical_penalty}") - - # 统计普通新闻情绪 + + level, tag = _geopolitical_match_level(text) + if is_global_event and level == "none": + level, tag = "moderate", "is_global_event" + + if level != "none": + delta = _geopolitical_sentiment_penalty_delta(level) + new_total = geopolitical_penalty + delta + if new_total < max_geo_total: + delta = max_geo_total - geopolitical_penalty + geopolitical_penalty += delta + preview = (title or summary or "")[:72] + logger.info( + f"Geopolitical sentiment ({level}, {tag}): {preview!r}, " + f"delta={delta}, cumulative={geopolitical_penalty}" + ) + if sentiment == "positive": positive_count += 1 elif sentiment == "negative": negative_count += 1 else: neutral_count += 1 - + total = positive_count + negative_count + neutral_count - - # 计算净情绪(普通新闻) + if total > 0: net_sentiment = (positive_count - negative_count) / total - base_score = net_sentiment * 60 # 基础情绪分数(-60到+60) + base_score = net_sentiment * 60 else: base_score = 0 - - # 地缘政治事件惩罚(如果有地缘政治事件,直接应用惩罚) - if geopolitical_count > 0: - # 地缘政治事件的影响权重很高,直接叠加惩罚 + + if geopolitical_penalty != 0: final_score = base_score + geopolitical_penalty - logger.info(f"Sentiment score: base={base_score:.1f}, geopolitical_penalty={geopolitical_penalty}, final={final_score:.1f}") + logger.info( + f"Sentiment score: base={base_score:.1f}, " + f"geopolitical_penalty={geopolitical_penalty}, final={final_score:.1f}" + ) else: final_score = base_score - + return max(-100, min(100, final_score)) def _calculate_macro_score(self, macro: Dict, market: str) -> float: @@ -1908,6 +2320,14 @@ IMPORTANT: return max(-100, min(100, score)) + def _detect_market_regime(self, indicators: Dict) -> str: + """Detect trending vs ranging from MA trend. trending | ranging""" + ma = indicators.get("moving_averages") or {} + trend = str(ma.get("trend", "sideways")).lower() + if "uptrend" in trend or "downtrend" in trend or "strong" in trend: + return "trending" + return "ranging" + def _score_to_decision(self, score: float, *, market: str = "Crypto") -> str: """ 根据客观评分转换为决策 @@ -2072,7 +2492,11 @@ IMPORTANT: decision = fast_result.get("decision", "HOLD") confidence = fast_result.get("confidence", 50) scores = fast_result.get("scores", {}) - + to_sum = (fast_result.get("trend_outlook_summary") or "").strip() + overview_report = fast_result.get("summary", "") or "" + if to_sum: + overview_report = f"{overview_report}\n\n【周期预判】{to_sum}" if overview_report.strip() else f"【周期预判】{to_sum}" + return { "overview": { "overallScore": scores.get("overall", 50), @@ -2085,7 +2509,7 @@ IMPORTANT: "sentiment": scores.get("sentiment", 50), "risk": 100 - confidence, # Inverse of confidence }, - "report": fast_result.get("summary", ""), + "report": overview_report, }, "fundamental": { "score": scores.get("fundamental", 50), @@ -2135,6 +2559,8 @@ IMPORTANT: "recommendation": "\n".join(fast_result.get("reasons", [])), }, "fast_analysis": fast_result, # Include new format for gradual migration + "trend_outlook": fast_result.get("trend_outlook"), + "trend_outlook_summary": fast_result.get("trend_outlook_summary"), "error": None, } diff --git a/backend_api_python/app/services/llm.py b/backend_api_python/app/services/llm.py index 0c1f97d..a7d2db5 100644 --- a/backend_api_python/app/services/llm.py +++ b/backend_api_python/app/services/llm.py @@ -82,11 +82,10 @@ class LLMService: if provider_name: try: + # Explicit selection should always be respected. + # API key validation happens later in call path. selected = LLMProvider(provider_name.lower()) - # Verify this provider has an API key configured - if self.get_api_key(selected): - return selected - logger.warning(f"LLM_PROVIDER={provider_name} but no API key configured, auto-detecting...") + return selected except ValueError: pass @@ -184,31 +183,36 @@ class LLMService: response = requests.post(url, headers=headers, json=data, timeout=timeout) - # Handle errors with detailed messages - if response.status_code == 403: - error_msg = "OpenRouter API 403 Forbidden" + # Handle non-2xx with provider/model-aware details + if response.status_code >= 400: + provider_name = "OpenRouter" if "openrouter" in (base_url or "").lower() else "LLM" + error_msg = f"{provider_name} API {response.status_code}" + err_text = "" try: - error_data = response.json() - if "error" in error_data: - error_detail = error_data["error"] - if isinstance(error_detail, dict): - error_msg = f"OpenRouter API 403: {error_detail.get('message', 'Forbidden')}" - elif isinstance(error_detail, str): - error_msg = f"OpenRouter API 403: {error_detail}" - except: - pass - - # Check if API key is configured - from app.config.api_keys import APIKeys - if not APIKeys.OPENROUTER_API_KEY: - error_msg += ". OPENROUTER_API_KEY 未配置,请在 backend_api_python/.env 中设置" - else: - error_msg += ". 可能的原因:1) API 密钥无效或过期 2) 账户余额不足 3) 没有权限访问该模型。请检查 https://openrouter.ai/keys" - + error_data = response.json() or {} + error_detail = error_data.get("error") + if isinstance(error_detail, dict): + err_text = str(error_detail.get("message") or "").strip() + elif isinstance(error_detail, str): + err_text = error_detail.strip() + except Exception: + err_text = (response.text or "").strip()[:300] + + if err_text: + error_msg = f"{error_msg}: {err_text}" + + # OpenRouter targeted hints + if "openrouter" in (base_url or "").lower(): + from app.config.api_keys import APIKeys + if not APIKeys.OPENROUTER_API_KEY: + error_msg += ". OPENROUTER_API_KEY 未配置,请在 backend_api_python/.env 中设置" + elif response.status_code == 403: + error_msg += ". 可能原因:API 密钥无效/过期、余额不足、或无模型权限。请检查 https://openrouter.ai/keys" + elif response.status_code == 404: + error_msg += ". 可能原因:模型不可用或账户隐私/数据策略限制。请检查 https://openrouter.ai/settings/privacy" + raise ValueError(error_msg) - response.raise_for_status() - result = response.json() if "choices" in result and len(result["choices"]) > 0: content = result["choices"][0]["message"]["content"] @@ -369,9 +373,23 @@ class LLMService: logger.debug(f"Auto-detected provider '{provider.value}' from model '{model}'") p = provider or self.provider + cfg = load_addon_config() + explicit_provider_name = str(cfg.get('llm', {}).get('provider') or os.getenv('LLM_PROVIDER', '')).strip().lower() + explicit_provider = None + if explicit_provider_name: + try: + explicit_provider = LLMProvider(explicit_provider_name) + except ValueError: + explicit_provider = None api_key = self.get_api_key(p) if not api_key: + # If provider is explicitly configured by user, don't silently switch. + if explicit_provider is not None and p == explicit_provider: + raise ValueError( + f"API key not configured for explicit provider: {p.value}. " + f"Please set {p.value.upper()}_API_KEY in settings." + ) # If no API key for current provider, try to find any available provider if try_alternative_providers: for alt_provider in [LLMProvider.DEEPSEEK, LLMProvider.GROK, LLMProvider.OPENAI, LLMProvider.GOOGLE, LLMProvider.OPENROUTER]: diff --git a/backend_api_python/app/services/market_data_collector.py b/backend_api_python/app/services/market_data_collector.py index 114e9ef..4044240 100644 --- a/backend_api_python/app/services/market_data_collector.py +++ b/backend_api_python/app/services/market_data_collector.py @@ -281,14 +281,12 @@ class MarketDataCollector: """ 计算技术指标 (本地计算,无外部依赖) - 返回格式符合前端 FastAnalysisReport.vue 的期望: - { - rsi: { value, signal }, - macd: { signal, trend }, - moving_averages: { ma5, ma10, ma20, trend }, - levels: { support, resistance }, - volatility: { level, pct } - } + 返回格式符合前端 FastAnalysisReport.vue 的期望。 + 口径说明(与常见行情终端对齐): + - RSI(14):Wilder 平滑(首段均幅为前 14 期简单平均,其后递推)。 + - MACD:收盘 EMA12/EMA26(首值=前 N 日 SMA),信号线=MACD 的 EMA9(SMA 种子)。 + - MA:SMA。枢轴:上一根 K 的 H/L/C。摆动高低:近 20 根 H/L 窗口极值。 + - 布林:20 收盘 SMA ± 2×总体标准差。ATR(14):Wilder(首 ATR=前 14 期 TR 简单平均,其后递推)。 """ if not klines or len(klines) < 5: return {} @@ -319,8 +317,8 @@ class MarketDataCollector: 'signal': rsi_signal, } - # ========== MACD ========== - if len(closes) >= 26: + # ========== MACD(SMA 种子 EMA,与常见终端一致)========== + if len(closes) >= 34: macd_raw = self._calc_macd(closes) macd_val = macd_raw.get('MACD', 0) macd_sig = macd_raw.get('MACD_signal', 0) @@ -366,6 +364,11 @@ class MarketDataCollector: 'ma20': round(ma20, 6), 'trend': ma_trend, } + + # 先算布林带,供下方合成支撑/阻力使用(键名 BB_upper / BB_lower) + bb_for_levels: Dict[str, Any] = {} + if len(closes) >= 20: + bb_for_levels = self._calc_bollinger(closes, 20, 2) or {} # ========== 支撑/阻力位 (多种方法综合) ========== # 方法1: 枢轴点 (Pivot Points) - 使用前一日数据 @@ -390,13 +393,13 @@ class MarketDataCollector: swing_high = max(recent_highs) if recent_highs else current_price * 1.05 swing_low = min(recent_lows) if recent_lows else current_price * 0.95 - # 方法3: 布林带中轨上下 (如果有) - bb_upper = indicators.get('bollinger', {}).get('upper', swing_high) - bb_lower = indicators.get('bollinger', {}).get('lower', swing_low) + # 方法3: 布林上下轨(与 _calc_bollinger 返回字段一致) + bb_upper = bb_for_levels.get('BB_upper', swing_high) + bb_lower = bb_for_levels.get('BB_lower', swing_low) # 综合取值: 取多种方法的平均/加权 - resistance = round((r1 + swing_high + bb_upper) / 3, 6) if bb_upper else round((r1 + swing_high) / 2, 6) - support = round((s1 + swing_low + bb_lower) / 3, 6) if bb_lower else round((s1 + swing_low) / 2, 6) + resistance = round((r1 + swing_high + bb_upper) / 3, 6) + support = round((s1 + swing_low + bb_lower) / 3, 6) indicators['levels'] = { 'support': support, @@ -411,20 +414,10 @@ class MarketDataCollector: 'method': 'pivot_swing_bb_avg' # 标注计算方法 } - # ========== ATR 和波动率 ========== - atr = 0 + # ========== ATR 和波动率(Wilder ATR,全序列递推至最新一根)========== + atr = 0.0 if len(klines) >= 14: - # 真实波动幅度 ATR (True Range) - true_ranges = [] - for i in range(-14, 0): - h = float(klines[i].get('high', 0)) - l = float(klines[i].get('low', 0)) - prev_c = float(klines[i-1].get('close', 0)) if i > -14 else h - if h > 0 and l > 0: - tr = max(h - l, abs(h - prev_c), abs(l - prev_c)) - true_ranges.append(tr) - - atr = sum(true_ranges) / len(true_ranges) if true_ranges else 0 + atr = float(self._calc_atr_wilder(klines, period=14)) volatility_pct = (atr / current_price * 100) if current_price > 0 else 0 if volatility_pct > 5: @@ -468,10 +461,9 @@ class MarketDataCollector: 'method': 'atr_support_resistance' } - # ========== 布林带 (附加) ========== - if len(closes) >= 20: - bb_data = self._calc_bollinger(closes, 20, 2) - indicators['bollinger'] = bb_data + # ========== 布林带 (附加,与 bb_for_levels 同一次计算) ========== + if bb_for_levels: + indicators['bollinger'] = bb_for_levels # ========== 成交量 (附加) ========== if len(volumes) >= 20: @@ -498,48 +490,109 @@ class MarketDataCollector: return {} def _calc_rsi(self, closes: List[float], period: int = 14) -> float: - """计算RSI""" + """Wilder RSI:首段均幅为前 period 期涨跌简单平均,之后按 Wilder 平滑递推。""" if len(closes) < period + 1: return 50.0 - - deltas = [closes[i] - closes[i-1] for i in range(1, len(closes))] - gains = [d if d > 0 else 0 for d in deltas] - losses = [-d if d < 0 else 0 for d in deltas] - - avg_gain = sum(gains[-period:]) / period - avg_loss = sum(losses[-period:]) / period - + + deltas = [closes[i] - closes[i - 1] for i in range(1, len(closes))] + gains = [d if d > 0 else 0.0 for d in deltas] + losses = [-d if d < 0 else 0.0 for d in deltas] + + if len(gains) < period: + return 50.0 + + avg_gain = sum(gains[:period]) / period + avg_loss = sum(losses[:period]) / period + + for i in range(period, len(gains)): + avg_gain = (avg_gain * (period - 1) + gains[i]) / period + avg_loss = (avg_loss * (period - 1) + losses[i]) / period + if avg_loss == 0: return 100.0 - + rs = avg_gain / avg_loss - rsi = 100 - (100 / (1 + rs)) - return round(rsi, 2) - + return round(100.0 - (100.0 / (1.0 + rs)), 2) + + def _ema_series_sma_seed(self, data: List[float], period: int) -> List[Optional[float]]: + """ + 标准 EMA:首值 = 前 period 根简单平均(SMA),之后 EMA_t = (P_t - EMA_{t-1}) * k + EMA_{t-1},k=2/(period+1)。 + 前 period-1 根无定义,返回 None。 + """ + n = len(data) + out: List[Optional[float]] = [None] * n + if n < period: + return out + k = 2.0 / (period + 1) + out[period - 1] = sum(data[:period]) / period + for i in range(period, n): + prev = out[i - 1] + if prev is None: + break + out[i] = (data[i] - prev) * k + prev + return out + def _calc_macd(self, closes: List[float]) -> Dict[str, float]: - """计算MACD""" - def ema(data, period): - multiplier = 2 / (period + 1) - ema_values = [data[0]] - for i in range(1, len(data)): - ema_values.append((data[i] - ema_values[-1]) * multiplier + ema_values[-1]) - return ema_values - - ema12 = ema(closes, 12) - ema26 = ema(closes, 26) - - macd_line = [ema12[i] - ema26[i] for i in range(len(closes))] - signal_line = ema(macd_line, 9) - histogram = [macd_line[i] - signal_line[i] for i in range(len(closes))] - + """ + MACD(12,26,9):DIF = EMA12(close) − EMA26(close),DEA = EMA9(DIF),柱 = DIF − DEA。 + 各 EMA 均采用 SMA 种子;DIF 自第 26 根 K 起有定义,信号线对 DIF 子序列再算 EMA9。 + """ + n = len(closes) + ema12 = self._ema_series_sma_seed(closes, 12) + ema26 = self._ema_series_sma_seed(closes, 26) + if n < 26 or ema12[-1] is None or ema26[-1] is None: + return {'MACD': 0.0, 'MACD_signal': 0.0, 'MACD_histogram': 0.0} + + macd_sub: List[float] = [] + for i in range(25, n): + v12 = ema12[i] + v26 = ema26[i] + if v12 is not None and v26 is not None: + macd_sub.append(v12 - v26) + + if not macd_sub: + return {'MACD': 0.0, 'MACD_signal': 0.0, 'MACD_histogram': 0.0} + + sig_series = self._ema_series_sma_seed(macd_sub, 9) + last_macd = macd_sub[-1] + last_sig = sig_series[-1] + if last_sig is None: + last_sig = last_macd + return { - 'MACD': round(macd_line[-1], 4), - 'MACD_signal': round(signal_line[-1], 4), - 'MACD_histogram': round(histogram[-1], 4) + 'MACD': round(last_macd, 6), + 'MACD_signal': round(last_sig, 6), + 'MACD_histogram': round(last_macd - last_sig, 6), } + + def _true_ranges(self, klines: List[Dict[str, Any]]) -> List[float]: + """每根 K 的 True Range(首根仅 H−L)。""" + trs: List[float] = [] + for i, k in enumerate(klines): + h = float(k.get('high', 0)) + l = float(k.get('low', 0)) + if h <= 0 or l <= 0: + trs.append(0.0) + continue + if i == 0: + trs.append(h - l) + else: + pc = float(klines[i - 1].get('close', 0)) + trs.append(max(h - l, abs(h - pc), abs(l - pc))) + return trs + + def _calc_atr_wilder(self, klines: List[Dict[str, Any]], period: int = 14) -> float: + """Wilder ATR:首 ATR = 前 period 期 TR 简单平均,之后 ATR_t = (ATR_{t-1}*(period-1)+TR_t)/period。""" + trs = self._true_ranges(klines) + if len(trs) < period: + return 0.0 + atr = sum(trs[:period]) / period + for i in range(period, len(trs)): + atr = (atr * (period - 1) + trs[i]) / period + return atr def _calc_bollinger(self, closes: List[float], period: int = 20, std_dev: int = 2) -> Dict[str, float]: - """计算布林带""" + """布林带:中轨为 period 收盘 SMA,σ 为总体标准差(方差/period),上下轨=中轨±std_dev×σ。""" if len(closes) < period: return {} @@ -723,58 +776,86 @@ class MarketDataCollector: def _get_earnings_data(self, symbol: str) -> Optional[Dict[str, Any]]: """ 获取盈利报告数据(Earnings) - - 包括:历史盈利、盈利预测、盈利日期等 + + 使用 quarterly_income_stmt 替代已弃用的 Ticker.earnings / quarterly_earnings, + 历史季度摘要从利润表推导;盈利日历仍用 ticker.calendar(若可用)。 """ + def _pick_float(stmt: pd.DataFrame, row_names: tuple, col) -> Optional[float]: + for name in row_names: + if name in stmt.index: + raw = stmt.loc[name, col] + if raw is None or (isinstance(raw, float) and pd.isna(raw)): + continue + try: + return float(raw) + except (TypeError, ValueError): + continue + return None + try: ticker = yf.Ticker(symbol) - earnings_data = {} - - # 历史盈利数据 + earnings_data: Dict[str, Any] = {} + + # 季度利润表(yfinance 推荐路径,避免 fundamentals.Ticker.earnings 弃用告警) try: - earnings_history = ticker.earnings_history - if earnings_history is not None and not earnings_history.empty: - # 获取最近4个季度 - recent_earnings = earnings_history.head(4) - earnings_data['history'] = [] - for _, row in recent_earnings.iterrows(): - earnings_data['history'].append({ - 'date': str(row.get('Date', '')), - 'eps_actual': float(row.get('EPS Actual', 0)) if row.get('EPS Actual') is not None else None, - 'eps_estimate': float(row.get('EPS Estimate', 0)) if row.get('EPS Estimate') is not None else None, - 'surprise': float(row.get('Surprise(%)', 0)) if row.get('Surprise(%)') is not None else None, + q_inc = ticker.quarterly_income_stmt + if q_inc is not None and not q_inc.empty and len(q_inc.columns) > 0: + cols = list(q_inc.columns)[:4] + latest_q = cols[0] + + rev = _pick_float( + q_inc, + ("Total Revenue", "Revenue", "Total Revenues", "Net Sales"), + latest_q, + ) + ni = _pick_float( + q_inc, + ( + "Net Income", + "Net Income Common Stockholders", + "Net Income Continuous Operations", + "Net Income Including Noncontrolling Interests", + ), + latest_q, + ) + earnings_data["quarterly"] = { + "latest_quarter": str(latest_q), + "revenue": rev, + "earnings": ni, + } + + # 最近若干季度 EPS(来自利润表行,非一致预期) + earnings_data["history"] = [] + for col in cols: + eps = _pick_float(q_inc, ("Diluted EPS", "Basic EPS"), col) + earnings_data["history"].append({ + "date": str(col), + "eps_actual": eps, + "eps_estimate": None, + "surprise": None, }) except Exception as e: - logger.debug(f"Earnings history fetch failed for {symbol}: {e}") - - # 盈利日历(未来盈利日期) + logger.debug(f"Quarterly income statement (earnings) fetch failed for {symbol}: {e}") + + # 盈利日历(未来盈利日期与一致预期) try: earnings_calendar = ticker.calendar if earnings_calendar is not None and not earnings_calendar.empty: - earnings_data['upcoming'] = { - 'next_earnings_date': str(earnings_calendar.index[0]) if len(earnings_calendar.index) > 0 else None, - 'eps_estimate': float(earnings_calendar.loc[earnings_calendar.index[0], 'Earnings Estimate']) if len(earnings_calendar.index) > 0 and 'Earnings Estimate' in earnings_calendar.columns else None, - 'revenue_estimate': float(earnings_calendar.loc[earnings_calendar.index[0], 'Revenue Estimate']) if len(earnings_calendar.index) > 0 and 'Revenue Estimate' in earnings_calendar.columns else None, + idx0 = earnings_calendar.index[0] + earnings_data["upcoming"] = { + "next_earnings_date": str(idx0), + "eps_estimate": float(earnings_calendar.loc[idx0, "Earnings Estimate"]) + if "Earnings Estimate" in earnings_calendar.columns + else None, + "revenue_estimate": float(earnings_calendar.loc[idx0, "Revenue Estimate"]) + if "Revenue Estimate" in earnings_calendar.columns + else None, } except Exception as e: logger.debug(f"Earnings calendar fetch failed for {symbol}: {e}") - - # 季度盈利数据 - try: - quarterly_earnings = ticker.quarterly_earnings - if quarterly_earnings is not None and not quarterly_earnings.empty: - latest_q = quarterly_earnings.index[0] if len(quarterly_earnings.index) > 0 else None - if latest_q: - earnings_data['quarterly'] = { - 'latest_quarter': str(latest_q), - 'revenue': float(quarterly_earnings.loc[latest_q, 'Revenue']) if 'Revenue' in quarterly_earnings.columns else None, - 'earnings': float(quarterly_earnings.loc[latest_q, 'Earnings']) if 'Earnings' in quarterly_earnings.columns else None, - } - except Exception as e: - logger.debug(f"Quarterly earnings fetch failed for {symbol}: {e}") - + return earnings_data if earnings_data else None - + except Exception as e: logger.debug(f"Earnings data fetch failed for {symbol}: {e}") return None diff --git a/backend_api_python/app/services/portfolio_monitor.py b/backend_api_python/app/services/portfolio_monitor.py index 64fb122..3ade22a 100644 --- a/backend_api_python/app/services/portfolio_monitor.py +++ b/backend_api_python/app/services/portfolio_monitor.py @@ -9,6 +9,7 @@ import json import threading import time import traceback +from concurrent.futures import ThreadPoolExecutor, as_completed from typing import Any, Dict, List, Optional from app.utils.db import get_db_connection @@ -16,6 +17,7 @@ from app.utils.logger import get_logger from app.services.fast_analysis import get_fast_analysis_service from app.services.signal_notifier import SignalNotifier from app.services.kline import KlineService +from app.services.billing_service import get_billing_service logger = get_logger(__name__) @@ -154,98 +156,92 @@ def _get_positions_for_monitor(position_ids: List[int] = None, user_id: int = No return [] +MAX_PARALLEL_ANALYSIS = 5 + + +def _analyze_single_position(pos: Dict[str, Any], language: str) -> Dict[str, Any]: + """Analyze a single position (designed to run inside a thread pool).""" + market = pos.get('market') + symbol = pos.get('symbol') + name = pos.get('name') or symbol + group_name = pos.get('group_name') + + if not market or not symbol: + return {'market': market, 'symbol': symbol, 'name': name, 'error': 'missing market/symbol'} + + try: + logger.info(f"Running fast AI analysis for {market}:{symbol}") + service = get_fast_analysis_service() + analysis_result = service.analyze( + market=market, symbol=symbol, language=language, timeframe='1D' + ) + + detailed = analysis_result.get('detailed_analysis', {}) + trading_plan = analysis_result.get('trading_plan', {}) + scores = analysis_result.get('scores', {}) + risks = analysis_result.get('risks', []) + risk_report = '\n'.join([f"• {r}" for r in risks]) if risks else '' + + result = { + 'market': market, 'symbol': symbol, 'name': name, 'group_name': group_name, + 'entry_price': pos.get('entry_price'), + 'current_price': pos.get('current_price') or analysis_result.get('market_data', {}).get('current_price'), + 'pnl': pos.get('pnl'), 'pnl_percent': pos.get('pnl_percent'), + 'quantity': pos.get('quantity'), 'side': pos.get('side'), + 'final_decision': analysis_result.get('decision', 'HOLD'), + 'confidence': analysis_result.get('confidence', 50), + 'reasoning': analysis_result.get('summary', ''), + 'trader_decision': analysis_result.get('decision', 'HOLD'), + 'trader_reasoning': analysis_result.get('summary', ''), + 'overview_report': detailed.get('technical', ''), + 'fundamental_report': detailed.get('fundamental', ''), + 'sentiment_report': detailed.get('sentiment', ''), + 'risk_report': risk_report, + 'suggested_entry': trading_plan.get('entry_price'), + 'suggested_stop_loss': trading_plan.get('stop_loss'), + 'suggested_take_profit': trading_plan.get('take_profit'), + 'technical_score': scores.get('technical', 50), + 'fundamental_score': scores.get('fundamental', 50), + 'sentiment_score': scores.get('sentiment', 50), + 'key_reasons': analysis_result.get('reasons', []), + 'error': analysis_result.get('error') + } + logger.info(f"Fast analysis completed for {market}:{symbol}: {analysis_result.get('decision', 'N/A')}") + return result + except Exception as e: + logger.error(f"Failed to analyze {market}:{symbol}: {e}") + return {'market': market, 'symbol': symbol, 'name': name, 'error': str(e)} + + def _run_ai_analysis(positions: List[Dict[str, Any]], config: Dict[str, Any]) -> Dict[str, Any]: """ - Run fast AI analysis on positions. - Uses the new FastAnalysisService (single LLM call, faster and more stable). + Run fast AI analysis on positions **in parallel** using a thread pool. """ try: language = config.get('language', 'en-US') custom_prompt = config.get('prompt', '') - - # Get the fast analysis service - service = get_fast_analysis_service() - - # Analyze each position - position_analyses = [] - - for pos in positions: - market = pos.get('market') - symbol = pos.get('symbol') - name = pos.get('name') or symbol - group_name = pos.get('group_name') - - if not market or not symbol: - continue - - try: - logger.info(f"Running fast AI analysis for {market}:{symbol}") - - # Use the new FastAnalysisService (single LLM call) - analysis_result = service.analyze( - market=market, - symbol=symbol, - language=language, - timeframe='1D' - ) - - # Extract information from the new format - detailed = analysis_result.get('detailed_analysis', {}) - trading_plan = analysis_result.get('trading_plan', {}) - scores = analysis_result.get('scores', {}) - - # Build risk report from risks list - risks = analysis_result.get('risks', []) - risk_report = '\n'.join([f"• {r}" for r in risks]) if risks else '' - - position_analysis = { - 'market': market, - 'symbol': symbol, - 'name': name, - 'group_name': group_name, - 'entry_price': pos.get('entry_price'), - 'current_price': pos.get('current_price') or analysis_result.get('market_data', {}).get('current_price'), - 'pnl': pos.get('pnl'), - 'pnl_percent': pos.get('pnl_percent'), - 'quantity': pos.get('quantity'), - 'side': pos.get('side'), - # New fast analysis results - 'final_decision': analysis_result.get('decision', 'HOLD'), - 'confidence': analysis_result.get('confidence', 50), - 'reasoning': analysis_result.get('summary', ''), - 'trader_decision': analysis_result.get('decision', 'HOLD'), # Same as final for fast analysis - 'trader_reasoning': analysis_result.get('summary', ''), - 'overview_report': detailed.get('technical', ''), - 'fundamental_report': detailed.get('fundamental', ''), - 'sentiment_report': detailed.get('sentiment', ''), - 'risk_report': risk_report, - # Trading plan - 'suggested_entry': trading_plan.get('entry_price'), - 'suggested_stop_loss': trading_plan.get('stop_loss'), - 'suggested_take_profit': trading_plan.get('take_profit'), - # Scores - 'technical_score': scores.get('technical', 50), - 'fundamental_score': scores.get('fundamental', 50), - 'sentiment_score': scores.get('sentiment', 50), - 'key_reasons': analysis_result.get('reasons', []), - 'error': analysis_result.get('error') - } - - position_analyses.append(position_analysis) - logger.info(f"Fast analysis completed for {market}:{symbol}: {analysis_result.get('decision', 'N/A')}") - - except Exception as e: - logger.error(f"Failed to analyze {market}:{symbol}: {e}") - position_analyses.append({ - 'market': market, - 'symbol': symbol, - 'name': name, - 'error': str(e) - }) - - # Build comprehensive report + + workers = min(len(positions), MAX_PARALLEL_ANALYSIS) + position_analyses: List[Dict[str, Any]] = [None] * len(positions) + + with ThreadPoolExecutor(max_workers=workers) as executor: + future_to_idx = { + executor.submit(_analyze_single_position, pos, language): idx + for idx, pos in enumerate(positions) + } + for future in as_completed(future_to_idx): + idx = future_to_idx[future] + try: + position_analyses[idx] = future.result() + except Exception as e: + pos = positions[idx] + position_analyses[idx] = { + 'market': pos.get('market'), 'symbol': pos.get('symbol'), + 'name': pos.get('name') or pos.get('symbol'), 'error': str(e) + } + analysis_report = _build_comprehensive_report(positions, position_analyses, language, custom_prompt) - + return { 'success': True, 'analysis': analysis_report, @@ -254,15 +250,11 @@ def _run_ai_analysis(positions: List[Dict[str, Any]], config: Dict[str, Any]) -> 'analyzed_count': len([p for p in position_analyses if not p.get('error')]), 'timestamp': _now_ts() } - + except Exception as e: logger.error(f"_run_ai_analysis failed: {e}") logger.error(traceback.format_exc()) - return { - 'success': False, - 'error': str(e), - 'timestamp': _now_ts() - } + return {'success': False, 'error': str(e), 'timestamp': _now_ts()} def _build_comprehensive_report( @@ -914,22 +906,67 @@ def run_single_monitor(monitor_id: int, override_language: str = None, user_id: if override_language: config['language'] = override_language - # Get positions for this user + # Resolve interval (frontend sends run_interval_minutes, legacy uses interval_minutes) + interval_minutes = int( + config.get('run_interval_minutes') + or config.get('interval_minutes') + or 60 + ) + + # Get positions (or build from config.symbol if no position_ids) positions = _get_positions_for_monitor(position_ids if position_ids else None, user_id=monitor_user_id) - + + # If monitor was created without positions but has symbol in config, build a virtual position + if not positions and config.get('symbol'): + positions = [{ + 'market': config.get('market', ''), + 'symbol': config.get('symbol', ''), + 'name': config.get('symbol', ''), + 'side': 'long', + 'quantity': 0, + 'entry_price': 0, + 'current_price': 0, + 'pnl': 0, + 'pnl_percent': 0, + }] + if not positions: return {'success': False, 'error': 'No positions to analyze'} + # ── Billing: charge per symbol analyzed ── + billing = get_billing_service() + symbol_count = len(positions) + per_symbol_cost = billing.get_feature_cost('ai_analysis') + total_cost = per_symbol_cost * symbol_count + + if total_cost > 0 and billing.is_billing_enabled(): + user_credits = billing.get_user_credits(monitor_user_id) + if user_credits < total_cost: + logger.warning( + f"Monitor #{monitor_id} skipped: insufficient credits " + f"({user_credits} < {total_cost} for {symbol_count} symbols)" + ) + return { + 'success': False, + 'error': f'Insufficient credits: need {total_cost}, have {user_credits}' + } + for i in range(symbol_count): + pos = positions[i] + ok, msg = billing.check_and_consume( + user_id=monitor_user_id, + feature='ai_analysis', + reference_id=f"monitor_{monitor_id}_{pos.get('symbol', '')}" + ) + if not ok: + logger.warning(f"Monitor #{monitor_id} billing failed at symbol #{i+1}: {msg}") + break + # Run analysis based on type if monitor_type == 'ai': result = _run_ai_analysis(positions, config) else: - # For other types, we can add price_alert, pnl_alert logic later result = {'success': False, 'error': f'Unsupported monitor type: {monitor_type}'} - # Update monitor record - interval_minutes = int(config.get('interval_minutes') or 60) - with get_db_connection() as db: cur = db.cursor() cur.execute( diff --git a/backend_api_python/app/services/reflection.py b/backend_api_python/app/services/reflection.py new file mode 100644 index 0000000..d04be22 --- /dev/null +++ b/backend_api_python/app/services/reflection.py @@ -0,0 +1,100 @@ +""" +Reflection Service - Post-trade validation and learning. + +Validates historical AI decisions against actual price outcomes, +updates qd_analysis_memory with was_correct/actual_return_pct, +and optionally triggers AI calibration. +""" +import os +import threading +import time +from typing import Dict, Any, Optional + +from app.utils.logger import get_logger +from app.services.analysis_memory import get_analysis_memory + +logger = get_logger(__name__) + +_reflection_thread: Optional[threading.Thread] = None +_reflection_stop = threading.Event() + + +class ReflectionService: + """ + Runs verification cycle: validate unvalidated decisions, optionally run calibration. + """ + + def run_verification_cycle(self) -> Dict[str, Any]: + """ + Run one verification cycle: + 1. Validate unvalidated analysis records (older than min_age_days) + 2. Optionally run AI calibration for configured markets + """ + memory = get_analysis_memory() + min_age_days = int(os.getenv("REFLECTION_MIN_AGE_DAYS", "7")) + limit = int(os.getenv("REFLECTION_VALIDATE_LIMIT", "200")) + + stats = memory.validate_unvalidated_older_than( + min_age_days=min_age_days, + limit=limit, + ) + logger.info(f"Reflection validation: {stats}") + + if stats.get("validated", 0) > 0: + self._maybe_run_calibration() + else: + logger.debug("No new validations, skipping calibration") + + return stats + + def _maybe_run_calibration(self) -> None: + """Run AI calibration if enabled.""" + if os.getenv("ENABLE_OFFLINE_AI_CALIBRATION", "true").lower() != "true": + return + try: + from app.services.ai_calibration import AICalibrationService + svc = AICalibrationService() + markets = (os.getenv("AI_CALIBRATION_MARKETS", "Crypto") or "Crypto").strip().split(",") + for market in markets: + market = market.strip() + if not market: + continue + result = svc.calibrate_market( + market=market, + lookback_days=int(os.getenv("AI_CALIBRATION_LOOKBACK_DAYS", "30")), + min_samples=int(os.getenv("AI_CALIBRATION_MIN_SAMPLES", "80")), + validate_before=False, + ) + if result: + logger.info( + f"[Reflection] Calibration updated for {market}: " + f"accuracy={result.best_accuracy:.1f}% thr=±{result.buy_threshold:.1f}" + ) + except Exception as e: + logger.warning(f"Reflection calibration failed: {e}", exc_info=True) + + +def start_reflection_worker() -> None: + """Start background reflection worker (validates + calibrates periodically).""" + global _reflection_thread + # Default to ON to reduce environment-specific configuration needs. + if os.getenv("ENABLE_REFLECTION_WORKER", "true").lower() != "true": + logger.info("Reflection worker disabled (ENABLE_REFLECTION_WORKER != true).") + return + interval_sec = int(os.getenv("REFLECTION_WORKER_INTERVAL_SEC", "86400")) + if _reflection_thread and _reflection_thread.is_alive(): + return + + def _run(): + _reflection_stop.clear() + logger.info(f"Reflection worker started, interval={interval_sec}s") + while not _reflection_stop.is_set(): + try: + ReflectionService().run_verification_cycle() + except Exception as e: + logger.error(f"Reflection cycle failed: {e}", exc_info=True) + _reflection_stop.wait(timeout=interval_sec) + logger.info("Reflection worker stopped.") + + _reflection_thread = threading.Thread(target=_run, daemon=True) + _reflection_thread.start() diff --git a/backend_api_python/app/services/trading_executor.py b/backend_api_python/app/services/trading_executor.py index 35652e2..27f261e 100644 --- a/backend_api_python/app/services/trading_executor.py +++ b/backend_api_python/app/services/trading_executor.py @@ -2263,8 +2263,33 @@ class TradingExecutor: language = amc.get("language") or amc.get("lang") or tc.get("language") or "zh-CN" language = str(language or "zh-CN") + # ── Billing: AI filter uses the same cost as ai_analysis ── + try: + from app.services.billing_service import get_billing_service + billing = get_billing_service() + if billing.is_billing_enabled(): + user_id = 1 + try: + with get_db_connection() as db: + cur = db.cursor() + cur.execute("SELECT user_id FROM qd_strategies_trading WHERE id = ?", (strategy_id,)) + row = cur.fetchone() + cur.close() + user_id = int((row or {}).get('user_id') or 1) + except Exception: + pass + ok, msg = billing.check_and_consume( + user_id=user_id, + feature='ai_analysis', + reference_id=f"ai_filter_{strategy_id}_{symbol}" + ) + if not ok: + logger.warning(f"AI filter billing failed for strategy {strategy_id}: {msg}") + return False, {"ai_decision": "", "reason": f"billing_failed:{msg}"} + except Exception as e: + logger.warning(f"AI filter billing check error: {e}") + try: - # 使用新的 FastAnalysisService (单次LLM调用,更快更稳定) from app.services.fast_analysis import get_fast_analysis_service service = get_fast_analysis_service() diff --git a/backend_api_python/env.example b/backend_api_python/env.example index 0739db8..894bf04 100644 --- a/backend_api_python/env.example +++ b/backend_api_python/env.example @@ -63,12 +63,8 @@ SMTP_USE_SSL=false # ========================= # Proxy (optional) # ========================= -# Most users only need PROXY_URL. -# Example local: -# PROXY_URL=socks5h://127.0.0.1:10808 -# -# Example Docker: -# PROXY_URL=socks5h://host.docker.internal:10808 +# PROXY_URL=socks5h://127.0.0.1:10808 # local +# PROXY_URL=socks5h://host.docker.internal:10808 # Docker PROXY_URL= # ========================= @@ -86,23 +82,47 @@ GITHUB_CLIENT_SECRET= GITHUB_REDIRECT_URI=http://localhost:5000/api/auth/oauth/github/callback # ========================= -# Billing / payments (optional) +# Billing / payments # ========================= -BILLING_ENABLED=False -USDT_PAY_ENABLED=False +BILLING_ENABLED=false + +# 积分单价 +BILLING_COST_AI_ANALYSIS=10 +BILLING_COST_AI_CODE_GEN=30 + +CREDITS_REGISTER_BONUS=100 +CREDITS_REFERRAL_BONUS=50 + +# Membership plans +MEMBERSHIP_MONTHLY_PRICE_USD=19.9 +MEMBERSHIP_YEARLY_PRICE_USD=199 +MEMBERSHIP_LIFETIME_PRICE_USD=499 +MEMBERSHIP_MONTHLY_CREDITS=500 +MEMBERSHIP_YEARLY_CREDITS=8000 +MEMBERSHIP_LIFETIME_MONTHLY_CREDITS=800 + +# USDT payment +USDT_PAY_ENABLED=false +USDT_PAY_CHAIN=TRC20 +USDT_TRC20_XPUB= +USDT_TRC20_CONTRACT=TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj +TRONGRID_BASE_URL=https://api.trongrid.io +TRONGRID_API_KEY= +USDT_PAY_CONFIRM_SECONDS=30 +USDT_PAY_EXPIRE_MINUTES=30 +USDT_WORKER_POLL_INTERVAL=30 # ========================= # Advanced / rarely changed # ========================= -# The settings below are optional. Most users can leave them unchanged. # Network / App tuning PYTHON_API_HOST=0.0.0.0 PYTHON_API_PORT=5000 -PYTHON_API_DEBUG=False +PYTHON_API_DEBUG=false RATE_LIMIT=100 -ENABLE_CACHE=False -ENABLE_REQUEST_LOG=True +ENABLE_CACHE=false +ENABLE_REQUEST_LOG=true # Strategy / execution tuning PENDING_ORDER_STALE_SEC=90 @@ -112,6 +132,7 @@ MAKER_OFFSET_BPS=2 STRATEGY_TICK_INTERVAL_SEC=10 PRICE_CACHE_TTL_SEC=10 K_LINE_HISTORY_GET_NUMBER=500 +SIGNAL_NOTIFY_TIMEOUT_SEC=6 # LLM advanced tuning OPENROUTER_API_URL=https://openrouter.ai/api/v1/chat/completions @@ -119,7 +140,6 @@ OPENROUTER_TEMPERATURE=0.7 OPENROUTER_MAX_TOKENS=4000 OPENROUTER_TIMEOUT=300 OPENROUTER_CONNECT_TIMEOUT=30 - OPENAI_BASE_URL=https://api.openai.com/v1 DEEPSEEK_BASE_URL=https://api.deepseek.com/v1 GROK_BASE_URL=https://api.x.ai/v1 @@ -128,32 +148,26 @@ GROK_BASE_URL=https://api.x.ai/v1 DATA_SOURCE_TIMEOUT=30 DATA_SOURCE_RETRY=3 DATA_SOURCE_RETRY_BACKOFF=0.5 - FINNHUB_API_KEY= FINNHUB_TIMEOUT=10 FINNHUB_RATE_LIMIT=60 - CCXT_DEFAULT_EXCHANGE=coinbase CCXT_TIMEOUT=10000 - AKSHARE_TIMEOUT=30 YFINANCE_TIMEOUT=30 - TIINGO_API_KEY= TIINGO_TIMEOUT=10 -# AI search / news providers +# AI search / news SEARCH_PROVIDER=google SEARCH_MAX_RESULTS=10 - SEARCH_GOOGLE_API_KEY= SEARCH_GOOGLE_CX= SEARCH_BING_API_KEY= - TAVILY_API_KEYS= SERPAPI_KEYS= -# SMS / phone notifications +# SMS / phone (optional) TWILIO_ACCOUNT_SID= TWILIO_AUTH_TOKEN= TWILIO_FROM_NUMBER= @@ -162,42 +176,27 @@ TWILIO_FROM_NUMBER= SECURITY_IP_MAX_ATTEMPTS=10 SECURITY_IP_WINDOW_MINUTES=5 SECURITY_IP_BLOCK_MINUTES=15 - SECURITY_ACCOUNT_MAX_ATTEMPTS=5 SECURITY_ACCOUNT_WINDOW_MINUTES=60 SECURITY_ACCOUNT_BLOCK_MINUTES=30 - VERIFICATION_CODE_EXPIRE_MINUTES=10 VERIFICATION_CODE_RATE_LIMIT=60 VERIFICATION_CODE_IP_HOURLY_LIMIT=10 VERIFICATION_CODE_MAX_ATTEMPTS=5 VERIFICATION_CODE_LOCK_MINUTES=30 -# Billing / credits -BILLING_COST_AI_ANALYSIS=10 -BILLING_COST_STRATEGY_RUN=5 -BILLING_COST_BACKTEST=3 -BILLING_COST_PORTFOLIO_MONITOR=8 -BILLING_COST_POLYMARKET_DEEP_ANALYSIS=15 +# AI analysis tuning +ENABLE_CONFIDENCE_CALIBRATION=false +ENABLE_AI_ENSEMBLE=false +AI_ENSEMBLE_MODELS=openai/gpt-4o,openai/gpt-4o-mini +ENABLE_REFLECTION_WORKER=false +REFLECTION_WORKER_INTERVAL_SEC=86400 +REFLECTION_MIN_AGE_DAYS=7 +REFLECTION_VALIDATE_LIMIT=200 +AI_CALIBRATION_MARKETS=Crypto +AI_CALIBRATION_LOOKBACK_DAYS=30 +AI_CALIBRATION_MIN_SAMPLES=80 +AI_ANALYSIS_CONSENSUS_TIMEFRAMES=1D,4H -CREDITS_REGISTER_BONUS=100 -CREDITS_REFERRAL_BONUS=50 - -# Membership plans -MEMBERSHIP_MONTHLY_PRICE_USD=19.9 -MEMBERSHIP_YEARLY_PRICE_USD=199 -MEMBERSHIP_LIFETIME_PRICE_USD=499 - -MEMBERSHIP_MONTHLY_CREDITS=500 -MEMBERSHIP_YEARLY_CREDITS=8000 -MEMBERSHIP_LIFETIME_MONTHLY_CREDITS=800 - -# USDT payment -USDT_PAY_CHAIN=TRC20 -USDT_TRC20_XPUB= -USDT_TRC20_CONTRACT=TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj -TRONGRID_BASE_URL=https://api.trongrid.io -TRONGRID_API_KEY= -USDT_PAY_CONFIRM_SECONDS=30 -USDT_PAY_EXPIRE_MINUTES=30 -USDT_WORKER_POLL_INTERVAL=30 +# Internal +INTERNAL_API_KEY= diff --git a/backend_api_python/scripts/run_calibration.py b/backend_api_python/scripts/run_calibration.py new file mode 100644 index 0000000..6cb523e --- /dev/null +++ b/backend_api_python/scripts/run_calibration.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +""" +Run AI calibration manually (e.g. via cron). + +Usage: + python scripts/run_calibration.py + AI_CALIBRATION_MARKET=Crypto python scripts/run_calibration.py + AI_CALIBRATION_MARKETS=Crypto,USStock python scripts/run_calibration.py +""" +import sys +import os + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) + +from app.services.ai_calibration import AICalibrationService + + +def main(): + markets = (os.getenv("AI_CALIBRATION_MARKETS") or os.getenv("AI_CALIBRATION_MARKET") or "Crypto").strip().split(",") + for m in markets: + m = m.strip() + if not m: + continue + print(f"Calibrating market: {m}") + svc = AICalibrationService() + r = svc.calibrate_market(market=m, validate_before=True) + if r: + print(f" OK: accuracy={r.best_accuracy:.1f}% threshold=±{r.buy_threshold:.1f} samples={r.sample_count}") + else: + print(" SKIP: not enough validated samples") + print("Done.") + + +if __name__ == "__main__": + main() diff --git a/backend_api_python/scripts/run_reflection_task.py b/backend_api_python/scripts/run_reflection_task.py index 614f0b2..bb2842b 100644 --- a/backend_api_python/scripts/run_reflection_task.py +++ b/backend_api_python/scripts/run_reflection_task.py @@ -1,19 +1,31 @@ import sys import os +from dotenv import load_dotenv -# 添加项目根目录到 Python 路径 -sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) +# 添加后端目录到 Python 路径(使得可以 import app.*) +# 由于 app 包位于 backend_api_python/app 下,而脚本位于 backend_api_python/scripts +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -from app.services.agents.reflection import ReflectionService +from app.services.reflection import ReflectionService def main(): + # Load backend envs for DATABASE_URL, reflection switches, etc. + # This script may be run locally, so we must load .env explicitly. + backend_env_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '.env')) + root_env_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '.env')) + if os.path.exists(root_env_path): + load_dotenv(root_env_path, override=False) + if os.path.exists(backend_env_path): + load_dotenv(backend_env_path, override=False) + """ 运行自动反思验证任务 建议通过 cron 或 定时任务调度器 每天运行一次 """ print("Running Automated Reflection Verification Task...") service = ReflectionService() - service.run_verification_cycle() + stats = service.run_verification_cycle() + print("Reflection stats:", stats) print("Task Completed.") if __name__ == "__main__": diff --git a/docs/FRONTEND_FAST_ANALYSIS.md b/docs/FRONTEND_FAST_ANALYSIS.md new file mode 100644 index 0000000..163e879 --- /dev/null +++ b/docs/FRONTEND_FAST_ANALYSIS.md @@ -0,0 +1,62 @@ +# 快速分析(Fast Analysis)前端对接说明 + +本开源仓库中的 **`frontend/` 仅包含构建产物 `dist/`**,Vue 源码在**私有前端仓库**(见根目录 `.github/workflows/update-frontend.yml`)。因此在本仓库内**无法直接修改** `FastAnalysisReport.vue` 等组件,需要在私有仓库中按下列说明调整。 + +## 1. 止盈 / 止损显示反了(BUY/SELL) + +### 后端约定(`/api/fast-analysis/analyze`) + +- **`trading_plan.stop_loss` / `trading_plan.take_profit`** 已与 `decision` 对齐几何关系: + - **BUY**:`stop_loss < 现价 < take_profit` + - **SELL(空)**:`take_profit < 现价 < stop_loss`(止损在上方,止盈在下方) +- **`indicators.trading_levels.suggested_stop_loss / suggested_take_profit`** 在采集器里是**多单(做多)参考价**,**不能**在 SELL 时直接拿来当界面上的「止损/止盈」两行,否则会和空单几何相反。 + +### 前端常见错误 + +- 第一行写死绑定 `trading_levels.suggested_stop_loss`、第二行绑定 `suggested_take_profit`。 +- 或把 `stop_loss` / `take_profit` **标签写反**(模板里「止损」绑了 `take_profit`)。 + +### 推荐写法(私有仓库中修改) + +只使用接口返回的 **`data.trading_plan`**(或兼容字段 **`stopLoss` / `takeProfit`**): + +```text +止损(亏损离场价): trading_plan.stop_loss (或 stopLoss) +止盈(盈利目标价): trading_plan.take_profit (或 takeProfit) +``` + +可选:根据 `trading_plan.decision === 'SELL'` 在文案旁加一句「空单:止损在现价上方,止盈在现价下方」。 + +### API 兼容字段(后端已加) + +`trading_plan` 内额外包含: + +- `entryPrice`, `stopLoss`, `takeProfit`, `positionSizePct` +- `loss_exit_price`, `profit_target_price`(与止损/止盈数值一致,语义更清晰) +- `decision`:与主结果 `decision` 一致,便于组件内判断 + +根级另有驼峰:`trendOutlook`, `trendOutlookSummary`(与 `trend_outlook` 等相同内容)。 + +## 2. 「未来时间段预判」不显示 + +后端字段: + +- **`trend_outlook`**:对象,含 `next_24h`, `next_3d`, `next_1w`, `next_1m`(每项含 `score`, `trend`, `strength`)。 +- **`trend_outlook_summary`**:一行可读摘要(中文/英文随 `language`)。 +- 若走 **`/api/fast-analysis/analyze-legacy`**:`fast_analysis` 内同样有上述字段;`overview.report` 会追加 **【周期预判】** 段落;顶层也有 `trend_outlook` / `trend_outlook_summary`。 + +### 前端需要做的 + +- 在快速分析结果页**单独渲染** `trend_outlook` 或 `trend_outlook_summary`(不要只读 `summary` 正文)。 +- 若请求的是 legacy 接口,请读 **`data.fast_analysis.trend_outlook`** 或顶层 **`data.trend_outlook`**,不要假设只在某一嵌套路径下。 + +## 3. 自检清单 + +| 检查项 | 说明 | +|--------|------| +| 接口路径 | 确认用的是 `/analyze` 还是 `/analyze-legacy`,字段路径一致 | +| 绑定来源 | 止损/止盈是否来自 `trading_plan`,而非 `trading_levels` | +| SELL 几何 | 空单位:`take_profit < current < stop_loss` | +| 周期预判 | 模板是否包含 `trend_outlook` 或 `trend_outlook_summary` | + +更新私有前端仓库后,通过 CI 或手动打包替换本仓库的 `frontend/dist/`(参见 `update-frontend.yml`)。 diff --git a/docs/INDICATOR_DEFINITIONS_CN.md b/docs/INDICATOR_DEFINITIONS_CN.md new file mode 100644 index 0000000..4e12ada --- /dev/null +++ b/docs/INDICATOR_DEFINITIONS_CN.md @@ -0,0 +1,18 @@ +# 技术指标计算口径(与代码一致) + +本文档与 `backend_api_python/app/services/market_data_collector.py` 中 `_calculate_indicators` 及子函数实现**严格对应**。 + +| 指标 | 实现要点 | +|------|-----------| +| **RSI(14)** | **Wilder RSI**:前 14 期涨跌分别取简单算术平均作为初始均幅;自第 15 期起 `avg = (avg_prev×13 + 当期) / 14`。RS = 均涨幅/均跌幅,RSI = 100 − 100/(1+RS)。 | +| **MACD(12,26,9)** | 收盘 **EMA12、EMA26**(首值=各自前 N 根 **SMA**,再按 α=2/(N+1) 递推)。**DIF** 从第 26 根 K 起有定义;对 DIF 子序列再算 **EMA9** 得 **DEA**;柱 = DIF − DEA。至少需要 **34** 根收盘才能稳定给出信号线(子序列长度≥9)。 | +| **MA5/10/20** | 最近 N 根收盘价的 **SMA**。 | +| **枢轴 Pivot** | **上一根 K** 的高、低、收:P=(H+L+C)/3,R1/S1/R2/S2 标准式。 | +| **摆动高/低** | 最近 **20 根 K** 的 `max(high)`、`min(low)`。 | +| **布林(20,2)** | 中轨 = 最近 20 收盘 **SMA**;方差 = Σ(x−μ)²/**20**(总体方差);σ=√方差;上下轨 = 中轨 ± 2σ;带宽% = (上轨−下轨)/中轨×100。合成支撑/阻力使用 **`BB_upper` / `BB_lower`** 字段。 | +| **ATR(14)** | **Wilder ATR**:TR 定义同经典;首 ATR = 前 14 个 TR 的简单平均;之后 `ATR_t = (ATR_{t-1}×13 + TR_t) / 14`,递推至**最后一根 K**(全序列,非仅尾窗)。 | +| **量比** | 当前根成交量 / 近 **20** 根成交量算术平均。 | +| **区间位置 %** | (当前收盘 − 近20低) / (近20高 − 近20低) × 100;高=低 时为 50。 | +| **合成支撑/阻力** | `(R1 + swing_high + BB_upper) / 3` 与 `(S1 + swing_low + BB_lower) / 3`,见 `levels.method`。 | + +前端说明文案键:`fastAnalysis.indicatorsProSubtitle`(应与上表同步维护)。 diff --git a/docs/README_CN.md b/docs/README_CN.md index 368b646..660c934 100644 --- a/docs/README_CN.md +++ b/docs/README_CN.md @@ -264,6 +264,7 @@ IMAGE_PREFIX=docker.xuanyuan.me/library/ - **🧠 记忆增强** — 智能体从过去的分析中学习(本地RAG,非云端) - **🔌 5+ LLM提供商**:OpenRouter(100+模型)、OpenAI、Gemini、DeepSeek、Grok - **📊 Polymarket预测市场** — 预测市场按需AI分析。输入市场链接或标题 → AI分析概率差异、机会评分和交易建议。完整历史跟踪和计费集成。 +- **📋 虚拟持仓管理** — 自选股中直接创建虚拟持仓,支持做多/做空方向、数量、买入单价,实时计算盈亏。无需连接真实交易所即可跟踪模拟投资组合。 ### 📈 完整交易生命周期 @@ -310,7 +311,7 @@ IMAGE_PREFIX=docker.xuanyuan.me/library/ - **💳 会员计划** — 月度/年度/终身层级,可配置定价和积分 - **₿ USDT链上支付** — TRC20扫码支付,每订单地址的HD钱包(xpub),通过TronGrid自动对账 - **🏪 指标市场** — 用户发布和销售Python指标,您收取佣金 -- **⚙️ 管理员仪表板** — 订单管理、AI使用统计、用户分析 +- **⚙️ 管理员仪表板** — 订单管理、AI使用统计、用户分析;系统设置保存后热重载,无需重启服务 ### 🔐 企业级安全 @@ -320,49 +321,67 @@ IMAGE_PREFIX=docker.xuanyuan.me/library/ - **演示模式** — 公共展示的只读模式
-🧠 AI智能体架构图(点击展开) +🧠 AI 分析架构图(点击展开) + +当前采用 **FastAnalysisService** 单次 LLM 流程,兼顾速度与多因子决策: ```mermaid flowchart TB - subgraph Entry["🌐 API入口"] - A["📡 POST /api/analysis/multi"] - A2["🔄 POST /api/analysis/reflect"] + subgraph Entry["🌐 API 入口"] + A["📡 POST /api/fast-analysis/analyze"] + A2["📜 GET /api/fast-analysis/history"] + A3["📊 GET /api/fast-analysis/similar-patterns"] end - subgraph Service["⚙️ 服务编排"] - B[AnalysisService] - C[AgentCoordinator] - D["📊 构建上下文
价格 · K线 · 新闻 · 指标"] + subgraph Data["📊 数据采集层"] + D1[MarketDataCollector] + D2["价格 · K线 · 宏观 · 新闻 · 基本面"] + D3["多周期共识 1D / 4H / 1H"] end - subgraph Agents["🤖 7智能体工作流"] - subgraph P1["📈 阶段1 · 并行分析"] - E1["🔍 MarketAnalyst"] - E2["📑 FundamentalAnalyst"] - E3["📰 NewsAnalyst"] - E4["💭 SentimentAnalyst"] - E5["⚠️ RiskAnalyst"] - end - subgraph P2["🎯 阶段2 · 多头vs空头辩论"] - F1["🐂 BullResearcher"] - F2["🐻 BearResearcher"] - end - subgraph P3["💹 阶段3 · 最终决策"] - G["🎰 TraderAgent → 买入 / 卖出 / 持有"] - end + subgraph Analysis["⚙️ 分析层"] + B["FastAnalysisService"] + C["单次 LLM 调用
强约束 Prompt"] + E["客观评分 + 多周期共识"] + F["AICalibration 阈值校准"] + G["买入 / 卖出 / 持有"] end - subgraph Memory["🧠 本地记忆存储"] - M1[("智能体记忆(PostgreSQL)")] + subgraph Memory["🧠 记忆层"] + M1[("qd_analysis_memory
PostgreSQL")] + M2["RAG 相似模式检索
(可选注入 Prompt)"] end - subgraph Reflect["🔄 反思循环"] - R[ReflectionService] - W["⏰ ReflectionWorker → 验证 + 学习"] - end - A --> B --> C --> D - D --> P1 --> P2 --> P3 - Agents <-.->|"RAG检索"| M1 - C --> R - W -.->|"更新记忆"| M1 + A --> B + B --> D1 --> D2 --> D3 + D3 --> C --> E --> F --> G + B -.->|"存储"| M1 + M1 -.->|"相似模式"| M2 + M2 -.->|"可选上下文"| C + A2 --> M1 + A3 --> M1 ``` +**流程概要:** +1. **数据采集** — 统一 `MarketDataCollector` 拉取价格、K 线、宏观、新闻、基本面 +2. **多周期共识** — 主周期 + 4H/1D 等技术周期,计算加权客观评分 +3. **单次 LLM** — 强约束 Prompt,综合技术 / 宏观 / 新闻 / 基本面 +4. **共识校准** — 当客观评分显著时,可覆盖 LLM 决策;数据质量差时倾向 HOLD +5. **记忆存储** — 写入 `qd_analysis_memory`,支持历史查询与相似模式检索 + +
+📈 AI 分析优化(已实现) + +| 功能 | 说明 | 配置 | +|------|------|------| +| **RAG 记忆注入** | 相似历史模式注入 Prompt | 默认启用 | +| **多指标相似度** | RSI、MACD、MA 趋势、波动率加权相似度 | 默认启用 | +| **反思验证** | 验证历史决策,更新 `was_correct` | `ENABLE_REFLECTION_WORKER=true` | +| **阈值自校准** | 定期校准 BUY/SELL 阈值 | `scripts/run_calibration.py` 或 `scripts/run_reflection_task.py` | +| **置信度校准** | 按置信度分桶统计准确率并调整 | `ENABLE_CONFIDENCE_CALIBRATION=true` | +| **市场状态感知** | 趋势/震荡市使用不同阈值(震荡市更保守) | 默认启用 | +| **多模型投票** | 2–3 模型投票降低单点偏差 | `ENABLE_AI_ENSEMBLE=true` + `AI_ENSEMBLE_MODELS=model1,model2` | + +详见 `backend_api_python/env.example` 中的 AI analysis optimizations 部分。 + +
+
--- @@ -466,10 +485,12 @@ QuantDinger/ | **AI / LLM** | `LLM_PROVIDER`、`OPENROUTER_API_KEY`、`OPENAI_API_KEY` | | **OAuth** | `GOOGLE_CLIENT_ID`、`GITHUB_CLIENT_ID` | | **安全** | `TURNSTILE_SITE_KEY`、`ENABLE_REGISTRATION` | +| **计费** | `BILLING_ENABLED`、`BILLING_COST_AI_ANALYSIS`、`BILLING_COST_AI_CODE_GEN` | | **会员** | `MEMBERSHIP_MONTHLY_PRICE_USD`、`MEMBERSHIP_MONTHLY_CREDITS` | | **USDT支付** | `USDT_PAY_ENABLED`、`USDT_TRC20_XPUB`、`TRONGRID_API_KEY` | | **代理** | `PROXY_URL` | -| **工作器** | `ENABLE_PENDING_ORDER_WORKER`、`ENABLE_PORTFOLIO_MONITOR` | +| **工作器** | `ENABLE_PENDING_ORDER_WORKER`、`ENABLE_PORTFOLIO_MONITOR`、`ENABLE_REFLECTION_WORKER` | +| **AI调优** | `ENABLE_AI_ENSEMBLE`、`ENABLE_CONFIDENCE_CALIBRATION`、`AI_ENSEMBLE_MODELS` | diff --git a/frontend/VERSION b/frontend/VERSION index b1b25a5..975ad37 100644 --- a/frontend/VERSION +++ b/frontend/VERSION @@ -1 +1 @@ -2.2.2 +3.0.4+indicators-copy-strict-20260323 diff --git a/frontend/dist/css/125.37fb7134.css b/frontend/dist/css/125.37fb7134.css deleted file mode 100644 index 91cfae0..0000000 --- a/frontend/dist/css/125.37fb7134.css +++ /dev/null @@ -1 +0,0 @@ -.fast-analysis-report[data-v-693144f6]{height:100%;overflow-y:auto;padding:20px;background:linear-gradient(135deg,#f5f7fa,#e4e8ec);border-radius:12px}.fast-analysis-report .loading-container[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px;background:#fff;border-radius:12px}.fast-analysis-report .loading-container .loading-content-pro[data-v-693144f6]{width:100%;max-width:400px;padding:40px}.fast-analysis-report .loading-container .loading-content-pro .loading-header[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:12px;margin-bottom:32px}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-icon-pro[data-v-693144f6]{font-size:28px;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-title[data-v-693144f6]{font-size:20px;font-weight:600;color:#1e293b}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper[data-v-693144f6]{margin-bottom:24px;position:relative}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper .progress-text[data-v-693144f6]{position:absolute;right:0;top:-24px;font-size:14px;font-weight:600;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .current-step[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px;padding:12px 20px;background:#f0f5ff;border-radius:8px;margin-bottom:24px;color:#1890ff;font-size:14px;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .current-step .anticon[data-v-693144f6]{font-size:16px}.fast-analysis-report .loading-container .loading-content-pro .steps-list[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:10px 16px;background:#f8fafc;border-radius:8px;font-size:13px;color:#94a3b8;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-dot[data-v-693144f6]{width:8px;height:8px;border-radius:50%;background:#e2e8f0;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-text[data-v-693144f6]{-webkit-box-flex:1;-ms-flex:1;flex:1}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-check[data-v-693144f6]{color:#52c41a;font-size:14px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active[data-v-693144f6]{background:#e6f7ff;color:#1890ff;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active .step-dot[data-v-693144f6]{background:#1890ff;-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.2);box-shadow:0 0 0 3px rgba(24,144,255,.2)}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done[data-v-693144f6]{background:#f6ffed;color:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done .step-dot[data-v-693144f6]{background:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .loading-footer[data-v-693144f6]{margin-top:24px;text-align:center}.fast-analysis-report .loading-container .loading-content-pro .loading-footer .elapsed-time[data-v-693144f6]{font-size:13px;color:#94a3b8;font-family:SF Mono,Monaco,monospace}.fast-analysis-report .empty-container[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px}.fast-analysis-report .empty-container .empty-content[data-v-693144f6]{text-align:center}.fast-analysis-report .empty-container .empty-content .empty-icon[data-v-693144f6]{font-size:64px;color:#d9d9d9}.fast-analysis-report .empty-container .empty-content .empty-title[data-v-693144f6]{margin-top:16px;font-size:18px;font-weight:600;color:#262626}.fast-analysis-report .empty-container .empty-content .empty-hint[data-v-693144f6]{margin-top:8px;color:#8c8c8c}.fast-analysis-report .result-container .decision-card[data-v-693144f6]{background:#fff;border-radius:16px;padding:24px;margin-bottom:20px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.08);box-shadow:0 4px 12px rgba(0,0,0,.08);border-left:6px solid #1890ff}.fast-analysis-report .result-container .decision-card.decision-buy[data-v-693144f6]{border-left-color:#52c41a;background:linear-gradient(135deg,#f6ffed,#fff)}.fast-analysis-report .result-container .decision-card.decision-sell[data-v-693144f6]{border-left-color:#ff4d4f;background:linear-gradient(135deg,#fff2f0,#fff)}.fast-analysis-report .result-container .decision-card.decision-hold[data-v-693144f6]{border-left-color:#faad14;background:linear-gradient(135deg,#fffbe6,#fff)}.fast-analysis-report .result-container .decision-card .decision-main[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:16px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .anticon[data-v-693144f6]{font-size:32px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .decision-text[data-v-693144f6]{font-size:36px;font-weight:800;letter-spacing:2px}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring[data-v-693144f6]{text-align:center}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-value[data-v-693144f6]{font-size:18px;font-weight:700}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-label[data-v-693144f6]{font-size:12px;color:#8c8c8c;margin-top:4px}.fast-analysis-report .result-container .decision-card .decision-summary[data-v-693144f6]{font-size:16px;line-height:1.6;color:#595959;padding-top:16px;border-top:1px dashed #e8e8e8}.fast-analysis-report .result-container .decision-card .consensus-strip[data-v-693144f6]{margin-top:14px;padding:12px 14px;border-radius:8px;background:rgba(24,144,255,.06);border:1px solid rgba(24,144,255,.2);font-size:13px;color:#434343}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-title[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:8px;color:#1890ff}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:12px 20px}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-693144f6]{font-style:normal;color:#8c8c8c;margin-right:6px}.fast-analysis-report .result-container .price-info-row[data-v-693144f6]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .price-info-row .price-card[data-v-693144f6]{background:#fff;border-radius:12px;padding:16px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .price-info-row .price-card .price-label[data-v-693144f6]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .price-info-row .price-card .price-value[data-v-693144f6]{font-size:18px;font-weight:700;color:#262626}.fast-analysis-report .result-container .price-info-row .price-card .price-value.positive[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-value.negative[data-v-693144f6]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card .price-hint[data-v-693144f6]{font-size:10px;color:#bfbfbf;margin-top:6px;cursor:help}.fast-analysis-report .result-container .price-info-row .price-card .price-hint .anticon[data-v-693144f6]{margin-right:2px}.fast-analysis-report .result-container .price-info-row .price-card .price-change[data-v-693144f6]{font-size:14px;margin-top:4px;font-weight:600}.fast-analysis-report .result-container .price-info-row .price-card .price-change.positive[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-change.negative[data-v-693144f6]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.current[data-v-693144f6]{border-top:3px solid #1890ff}.fast-analysis-report .result-container .price-info-row .price-card.entry[data-v-693144f6]{border-top:3px solid #722ed1}.fast-analysis-report .result-container .price-info-row .price-card.stop[data-v-693144f6]{border-top:3px solid #ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.target[data-v-693144f6]{border-top:3px solid #52c41a}.fast-analysis-report .result-container .scores-row[data-v-693144f6]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .scores-row .score-item[data-v-693144f6]{background:#fff;border-radius:12px;padding:16px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .scores-row .score-item .score-header[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .scores-row .score-item .score-header .anticon[data-v-693144f6]{color:#1890ff}.fast-analysis-report .result-container .scores-row .score-item .score-value[data-v-693144f6]{text-align:right;font-size:20px;font-weight:700;color:#262626;margin-top:8px}.fast-analysis-report .result-container .scores-row .score-item.overall[data-v-693144f6]{background:linear-gradient(135deg,#e6f7ff,#fff);border:1px solid #91d5ff}.fast-analysis-report .result-container .detailed-analysis[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card[data-v-693144f6]{background:linear-gradient(135deg,#fff,#fafafa);border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.06);box-shadow:0 2px 12px rgba(0,0,0,.06);border-left:4px solid #1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.technical[data-v-693144f6]{border-left-color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.fundamental[data-v-693144f6]{border-left-color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card.sentiment[data-v-693144f6]{border-left-color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;margin-bottom:14px;font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header .anticon[data-v-693144f6]{font-size:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.technical .anticon[data-v-693144f6]{color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.fundamental .anticon[data-v-693144f6]{color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.sentiment .anticon[data-v-693144f6]{color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-content[data-v-693144f6]{font-size:14px;line-height:1.8;color:#595959;text-align:justify}.fast-analysis-report .result-container .analysis-details[data-v-693144f6]{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.fast-analysis-report .result-container .analysis-details .detail-section[data-v-693144f6]{background:#fff;border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .analysis-details .detail-section .section-title[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:16px;font-weight:600;margin-bottom:16px;color:#262626}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list[data-v-693144f6]{list-style:none;padding:0;margin:0}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]{padding:10px 0;border-bottom:1px solid #f0f0f0;font-size:14px;line-height:1.6;color:#595959}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]:last-child{border-bottom:none}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]:before{content:"•";margin-right:8px;color:#1890ff}.fast-analysis-report .result-container .analysis-details .detail-section.reasons[data-v-693144f6]{border-left:4px solid #52c41a}.fast-analysis-report .result-container .analysis-details .detail-section.risks[data-v-693144f6]{border-left:4px solid #faad14}.fast-analysis-report .result-container .indicators-section[data-v-693144f6]{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .indicators-section .section-title[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:16px;font-weight:600;margin-bottom:16px;color:#262626}.fast-analysis-report .result-container .indicators-section .section-title .anticon[data-v-693144f6]{color:#1890ff}.fast-analysis-report .result-container .indicators-section .indicators-grid[data-v-693144f6]{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item[data-v-693144f6]{background:#fafafa;border-radius:8px;padding:12px;text-align:center}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-name[data-v-693144f6]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value[data-v-693144f6]{font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bullish[data-v-693144f6],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.oversold[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bearish[data-v-693144f6],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.high-volatility[data-v-693144f6],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.overbought[data-v-693144f6]{color:#ff4d4f}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.low-volatility[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-signal[data-v-693144f6]{font-size:11px;color:#8c8c8c;margin-top:4px;text-transform:capitalize}.fast-analysis-report .result-container .feedback-section[data-v-693144f6]{background:#fff;border-radius:12px;padding:20px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .feedback-section .feedback-question[data-v-693144f6]{font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .feedback-section .feedback-buttons[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px;margin-bottom:16px}.fast-analysis-report .result-container .feedback-section .feedback-buttons .ant-btn[data-v-693144f6]{min-width:100px}.fast-analysis-report .result-container .feedback-section .analysis-meta[data-v-693144f6]{font-size:12px;color:#8c8c8c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px}@media (max-width:992px){.fast-analysis-report .price-info-row[data-v-693144f6],.fast-analysis-report .scores-row[data-v-693144f6]{grid-template-columns:repeat(2,1fr)}.fast-analysis-report .analysis-details[data-v-693144f6]{grid-template-columns:1fr}}@media (max-width:576px){.fast-analysis-report[data-v-693144f6]{padding:12px}.fast-analysis-report .price-info-row[data-v-693144f6],.fast-analysis-report .scores-row[data-v-693144f6]{grid-template-columns:1fr}.fast-analysis-report .decision-card[data-v-693144f6]{padding:16px}.fast-analysis-report .decision-card .decision-main[data-v-693144f6]{gap:16px;text-align:center}.fast-analysis-report .decision-card .decision-main .decision-badge[data-v-693144f6],.fast-analysis-report .decision-card .decision-main[data-v-693144f6]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fast-analysis-report .decision-card .decision-main .decision-badge .decision-text[data-v-693144f6]{font-size:28px}}.fast-analysis-report.theme-dark[data-v-693144f6]{background:linear-gradient(135deg,#1e222d,#131722)}.fast-analysis-report.theme-dark .loading-content .loading-text[data-v-693144f6]{color:#00e5ff}.fast-analysis-report.theme-dark .empty-content .empty-title[data-v-693144f6]{color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card[data-v-693144f6]{background:#2a2e39;border-left-color:#1890ff}.fast-analysis-report.theme-dark .decision-card.decision-buy[data-v-693144f6]{background:linear-gradient(135deg,rgba(82,196,26,.1),#2a2e39)}.fast-analysis-report.theme-dark .decision-card.decision-sell[data-v-693144f6]{background:linear-gradient(135deg,rgba(255,77,79,.1),#2a2e39)}.fast-analysis-report.theme-dark .decision-card.decision-hold[data-v-693144f6]{background:linear-gradient(135deg,rgba(250,173,20,.1),#2a2e39)}.fast-analysis-report.theme-dark .decision-card .decision-summary[data-v-693144f6]{color:#868993;border-top-color:#363c4e}.fast-analysis-report.theme-dark .decision-card .consensus-strip[data-v-693144f6]{background:rgba(24,144,255,.12);border-color:rgba(24,144,255,.35);color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-title[data-v-693144f6]{color:#69c0ff}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-693144f6]{color:#868993}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card[data-v-693144f6]{background:linear-gradient(135deg,#2a2e39,#1e222d)}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.technical[data-v-693144f6]{border-left-color:#1890ff}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.fundamental[data-v-693144f6]{border-left-color:#722ed1}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.sentiment[data-v-693144f6]{border-left-color:#eb2f96}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-header[data-v-693144f6]{color:#d1d4dc}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-content[data-v-693144f6]{color:#868993}.fast-analysis-report.theme-dark .detail-section[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section[data-v-693144f6],.fast-analysis-report.theme-dark .price-card[data-v-693144f6],.fast-analysis-report.theme-dark .score-item[data-v-693144f6]{background:#2a2e39;color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .section-title[data-v-693144f6]{color:#868993}.fast-analysis-report.theme-dark .detail-section .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .score-value[data-v-693144f6]{color:#d1d4dc}.fast-analysis-report.theme-dark .score-item.overall[data-v-693144f6]{background:linear-gradient(135deg,rgba(24,144,255,.1),#2a2e39);border-color:#1890ff}.fast-analysis-report.theme-dark .detail-list li[data-v-693144f6]{color:#868993;border-bottom-color:#363c4e}.fast-analysis-report.theme-dark .indicators-grid .indicator-item[data-v-693144f6]{background:#363c4e}.ai-analysis-container[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc(100vh - 120px);background:#f0f2f5;overflow:hidden;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.ai-analysis-container.embedded[data-v-41eda137]{height:auto;min-height:700px;background:transparent}.ai-analysis-container.embedded .main-content-full[data-v-41eda137]{-webkit-box-shadow:none;box-shadow:none;border-radius:0}.main-content-full[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden;background:#fff;border-radius:12px;height:100%;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.08);box-shadow:0 2px 8px rgba(0,0,0,.08);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.top-index-bar[data-v-41eda137]{gap:8px;padding:8px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-family:SF Mono,Monaco,Consolas,monospace}.top-index-bar .indicator-box[data-v-41eda137],.top-index-bar[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.top-index-bar .indicator-box[data-v-41eda137]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:4px 10px;background:#fff;border-radius:6px;border:1px solid #e2e8f0;min-width:50px}.top-index-bar .indicator-box .ind-label[data-v-41eda137]{font-size:9px;color:#94a3b8;text-transform:uppercase}.top-index-bar .indicator-box .ind-value[data-v-41eda137]{font-size:13px;font-weight:700;color:#1e293b}.top-index-bar .indicator-box.fear-greed.extreme-fear .ind-value[data-v-41eda137]{color:#dc2626}.top-index-bar .indicator-box.fear-greed.fear .ind-value[data-v-41eda137]{color:#ea580c}.top-index-bar .indicator-box.fear-greed.neutral .ind-value[data-v-41eda137]{color:#ca8a04}.top-index-bar .indicator-box.fear-greed.greed .ind-value[data-v-41eda137]{color:#65a30d}.top-index-bar .indicator-box.fear-greed.extreme-greed .ind-value[data-v-41eda137],.top-index-bar .indicator-box.vix.low .ind-value[data-v-41eda137]{color:#16a34a}.top-index-bar .indicator-box.vix.medium .ind-value[data-v-41eda137]{color:#ca8a04}.top-index-bar .indicator-box.vix.high .ind-value[data-v-41eda137]{color:#dc2626}.top-index-bar .indicator-box.dxy .ind-value[data-v-41eda137]{color:#2563eb}.top-index-bar .indices-marquee[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-width:0}.top-index-bar .indices-marquee .marquee-track[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;-webkit-animation:marquee-41eda137 35s linear infinite;animation:marquee-41eda137 35s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content}.top-index-bar .indices-marquee .marquee-track[data-v-41eda137]:hover{-webkit-animation-play-state:paused;animation-play-state:paused}.top-index-bar .indices-marquee .index-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:4px 8px;background:#fff;border-radius:4px;border:1px solid #e2e8f0;font-size:11px;white-space:nowrap}.top-index-bar .indices-marquee .index-item .idx-flag[data-v-41eda137]{font-size:11px}.top-index-bar .indices-marquee .index-item .idx-symbol[data-v-41eda137]{color:#64748b;font-weight:500}.top-index-bar .indices-marquee .index-item .idx-price[data-v-41eda137]{color:#1e293b;font-weight:600}.top-index-bar .indices-marquee .index-item .idx-change[data-v-41eda137]{font-weight:600;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1px}.top-index-bar .indices-marquee .index-item .idx-change.up[data-v-41eda137]{color:#16a34a}.top-index-bar .indices-marquee .index-item .idx-change.down[data-v-41eda137]{color:#dc2626}@-webkit-keyframes marquee-41eda137{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes marquee-41eda137{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.top-index-bar .refresh-btn[data-v-41eda137]{color:#94a3b8;-ms-flex-negative:0;flex-shrink:0}.top-index-bar .refresh-btn[data-v-41eda137]:hover{color:#1e293b}.main-body[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:12px;overflow:hidden;min-height:0}.left-panel[data-v-41eda137],.main-body[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.left-panel[data-v-41eda137]{width:280px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow-y:auto}.left-panel .heatmap-box[data-v-41eda137]{background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0}.left-panel .heatmap-box .box-header[data-v-41eda137]{margin-bottom:10px}.left-panel .heatmap-box .box-header[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper{font-size:10px;padding:0 6px;height:22px;line-height:20px}.left-panel .heatmap-box .box-header[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff);color:#fff}.left-panel .heatmap-box .heatmap-grid[data-v-41eda137]{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.left-panel .heatmap-box .heatmap-grid .heat-cell[data-v-41eda137]{padding:6px 4px;border-radius:4px;text-align:center;font-size:9px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-name[data-v-41eda137]{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-price[data-v-41eda137]{display:block;font-size:9px;opacity:.8;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-val[data-v-41eda137]{font-weight:700;font-size:10px}.left-panel .calendar-box[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;overflow:hidden}.left-panel .calendar-box .box-header[data-v-41eda137]{margin-bottom:8px}.left-panel .calendar-box .box-header .box-title[data-v-41eda137]{font-size:12px;color:#64748b;font-weight:600}.left-panel .calendar-box .box-header .box-title .anticon[data-v-41eda137]{margin-right:6px;color:var(--primary-color,#1890ff)}.left-panel .calendar-box .calendar-list[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.left-panel .calendar-box .calendar-list[data-v-41eda137]::-webkit-scrollbar{width:4px}.left-panel .calendar-box .calendar-list[data-v-41eda137]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:2px}.left-panel .calendar-box .calendar-list .cal-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;padding:6px 0;border-bottom:1px solid #f1f5f9;font-size:10px}.left-panel .calendar-box .calendar-list .cal-item[data-v-41eda137]:last-child{border-bottom:none}.left-panel .calendar-box .calendar-list .cal-item.high[data-v-41eda137]{border-left:3px solid #dc2626;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.medium[data-v-41eda137]{border-left:3px solid #ca8a04;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.low[data-v-41eda137]{border-left:3px solid #16a34a;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item .cal-date[data-v-41eda137]{font-size:9px;color:#94a3b8;min-width:32px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-time[data-v-41eda137]{color:#64748b;min-width:36px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-flag[data-v-41eda137]{font-size:12px}.left-panel .calendar-box .calendar-list .cal-item .cal-name[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;color:#334155;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.left-panel .calendar-box .calendar-list .cal-item .cal-impact[data-v-41eda137]{font-weight:600;font-size:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bullish[data-v-41eda137]{color:#16a34a}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bearish[data-v-41eda137]{color:#dc2626}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.neutral[data-v-41eda137]{color:#94a3b8}.left-panel .calendar-box .calendar-list .cal-empty[data-v-41eda137]{text-align:center;color:#94a3b8;padding:20px 0;font-size:12px}.right-panel[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.right-panel .analysis-toolbar[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #f1f5f9;background:#fafafa;border-radius:8px 8px 0 0}.right-panel .analysis-toolbar .symbol-selector[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:320px}.right-panel .analysis-toolbar .analyze-button[data-v-41eda137]{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)}.right-panel .analysis-toolbar .history-button[data-v-41eda137]{border-color:#d9d9d9}.right-panel .analysis-main[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;padding:16px;min-height:0}.right-panel .analysis-main .analysis-placeholder[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;min-height:300px}.right-panel .analysis-main .analysis-placeholder .placeholder-content[data-v-41eda137]{text-align:center}.right-panel .analysis-main .analysis-placeholder .placeholder-content .placeholder-icon[data-v-41eda137]{font-size:72px;color:var(--primary-color,#1890ff);opacity:.5;margin-bottom:20px}.right-panel .analysis-main .analysis-placeholder .placeholder-content h3[data-v-41eda137]{font-size:18px;color:#1e293b;margin-bottom:8px}.right-panel .analysis-main .analysis-placeholder .placeholder-content p[data-v-41eda137]{font-size:14px;color:#64748b}.watchlist-panel[data-v-41eda137]{width:200px;-ms-flex-negative:0;flex-shrink:0;background:#fff;border-radius:8px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.watchlist-panel .panel-header[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #f1f5f9;background:#fafafa}.watchlist-panel .panel-header .panel-title[data-v-41eda137]{font-size:12px;font-weight:600;color:#64748b}.watchlist-panel .panel-header .panel-title .anticon[data-v-41eda137]{color:#facc15;margin-right:6px}.watchlist-panel .watchlist-list[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:8px}.watchlist-panel .watchlist-list[data-v-41eda137]::-webkit-scrollbar{width:4px}.watchlist-panel .watchlist-list[data-v-41eda137]::-webkit-scrollbar-thumb{background:#e2e8f0;border-radius:2px}.watchlist-panel .watchlist-list .watchlist-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 10px;border-radius:6px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;margin-bottom:4px}.watchlist-panel .watchlist-list .watchlist-item[data-v-41eda137]:hover{background:#f8fafc}.watchlist-panel .watchlist-list .watchlist-item.active[data-v-41eda137]{background:#e6f7ff;border:1px solid #91d5ff}.watchlist-panel .watchlist-list .watchlist-item .item-main[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.watchlist-panel .watchlist-list .watchlist-item .item-main .item-symbol[data-v-41eda137]{display:block;font-size:12px;font-weight:600;color:#1e293b}.watchlist-panel .watchlist-list .watchlist-item .item-main .item-name[data-v-41eda137]{display:block;font-size:10px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.watchlist-panel .watchlist-list .watchlist-item .item-price[data-v-41eda137]{text-align:right;margin-right:8px;font-family:SF Mono,Monaco,monospace}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-value[data-v-41eda137]{display:block;font-size:11px;font-weight:600;color:#1e293b}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-change[data-v-41eda137]{display:block;font-size:10px;font-weight:600}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-change.up[data-v-41eda137]{color:#16a34a}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-change.down[data-v-41eda137]{color:#dc2626}.watchlist-panel .watchlist-list .watchlist-item .item-remove[data-v-41eda137]{color:#cbd5e1;font-size:12px;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.watchlist-panel .watchlist-list .watchlist-item .item-remove[data-v-41eda137]:hover{color:#dc2626}.watchlist-panel .watchlist-list .watchlist-item:hover .item-remove[data-v-41eda137]{opacity:1}.watchlist-panel .watchlist-list .watchlist-empty[data-v-41eda137]{text-align:center;padding:24px 12px;color:#94a3b8}.watchlist-panel .watchlist-list .watchlist-empty .anticon[data-v-41eda137]{font-size:32px;margin-bottom:8px;display:block}.watchlist-panel .watchlist-list .watchlist-empty p[data-v-41eda137]{font-size:12px;margin-bottom:12px}@-webkit-keyframes pulse-41eda137{0%,to{opacity:1}50%{opacity:.5}}@keyframes pulse-41eda137{0%,to{opacity:1}50%{opacity:.5}}@media (max-width:992px){.ai-analysis-container[data-v-41eda137]{height:auto;min-height:calc(100vh - 64px);overflow-y:auto}.main-content-full[data-v-41eda137]{height:auto;min-height:auto}.top-index-bar[data-v-41eda137]{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:8px}.top-index-bar .indicator-box[data-v-41eda137]{min-width:45px;padding:3px 6px}.top-index-bar .indices-marquee[data-v-41eda137]{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10;width:100%;margin-top:8px}.main-body[data-v-41eda137]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:12px}.left-panel[data-v-41eda137]{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:12px}.left-panel .calendar-box[data-v-41eda137],.left-panel .heatmap-box[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.left-panel .calendar-box[data-v-41eda137]{max-height:200px}.right-panel .analysis-toolbar[data-v-41eda137]{-ms-flex-wrap:wrap;flex-wrap:wrap}.right-panel .analysis-toolbar .symbol-selector[data-v-41eda137]{width:100%!important;max-width:none!important}.right-panel .analysis-toolbar .analyze-button[data-v-41eda137],.right-panel .analysis-toolbar .history-button[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1}.watchlist-panel[data-v-41eda137]{width:100%;max-height:200px;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}}.ai-analysis-container.theme-dark[data-v-41eda137]{background:#131722;color:#d1d4dc}.ai-analysis-container.theme-dark .main-content-full[data-v-41eda137]{background:#1e222d;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3)}.ai-analysis-container.theme-dark .top-index-bar[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .top-index-bar .indicator-box[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-label[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-value[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-symbol[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-price[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-41eda137]:hover{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-panel[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-panel .panel-header[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-panel .panel-header .panel-title[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item[data-v-41eda137]:hover{background:#363c4e}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item.active[data-v-41eda137]{background:rgba(24,144,255,.1);border-color:#1890ff}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item .item-main .item-symbol[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item .item-main .item-name[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item .item-price .price-value[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-empty[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .watchlist-bar-legacy[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip.active[data-v-41eda137],.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-41eda137]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.1)}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-symbol[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-price[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper{background:#1e222d;border-color:#363c4e;color:#868993}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper:hover{color:#d1d4dc}.ai-analysis-container.theme-dark .left-panel .calendar-box[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .left-panel .calendar-box .box-title[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item[data-v-41eda137]{border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-date[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-time[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-name[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-empty[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .right-panel[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .right-panel .analysis-toolbar[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .right-panel .analysis-toolbar .history-button[data-v-41eda137]{background:#2a2e39;border-color:#363c4e;color:#d1d4dc}.ai-analysis-container.theme-dark .right-panel .analysis-main .analysis-placeholder .placeholder-content h3[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .right-panel .analysis-main .analysis-placeholder .placeholder-content p[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-bar-compat[data-v-41eda137]{background:#1e222d;border-top-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-compat .bar-label[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip.active[data-v-41eda137],.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-41eda137]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.1)}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-symbol[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-price[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-remove[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark[data-v-41eda137] .symbol-selector .ant-select-selection{background-color:#2a2e39;border-color:#363c4e;color:#d1d4dc}.add-stock-modal-content .market-tabs[data-v-41eda137]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-41eda137],.add-stock-modal-content .search-results-section[data-v-41eda137],.add-stock-modal-content .symbol-search-section[data-v-41eda137]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-41eda137],.add-stock-modal-content .search-results-section .section-title[data-v-41eda137]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-41eda137]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-41eda137]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-41eda137]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-41eda137]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-41eda137]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-41eda137]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.skeleton-box .skeleton-text[data-v-41eda137]{display:block;height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;border-radius:4px;margin:3px 0}.skeleton-box .skeleton-text.short[data-v-41eda137]{width:40px;height:9px}.skeleton-cell[data-v-41eda137]{background:#f8fafc!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:8px 4px}.skeleton-cell .skeleton-text[data-v-41eda137]{width:80%;height:10px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;border-radius:3px;margin:2px 0}.skeleton-cell .skeleton-text.short[data-v-41eda137]{width:50%;height:8px}.skeleton-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:6px 0}.skeleton-item .skeleton-text[data-v-41eda137]{height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;border-radius:4px;-webkit-box-flex:1;-ms-flex:1;flex:1}.skeleton-item .skeleton-text.short[data-v-41eda137]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:40px}.indices-empty[data-v-41eda137],.indices-loading[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:11px;color:#94a3b8;padding:4px 16px}.indices-loading .anticon[data-v-41eda137]{margin-right:6px}.heatmap-empty[data-v-41eda137]{grid-column:-1;text-align:center;padding:20px;color:#94a3b8;font-size:12px}@-webkit-keyframes skeleton-pulse-41eda137{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes skeleton-pulse-41eda137{0%{background-position:200% 0}to{background-position:-200% 0}}.theme-dark .skeleton-box .skeleton-text[data-v-41eda137],.theme-dark .skeleton-cell .skeleton-text[data-v-41eda137],.theme-dark .skeleton-item .skeleton-text[data-v-41eda137]{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#363c4e),color-stop(50%,#424857),color-stop(75%,#363c4e));background:linear-gradient(90deg,#363c4e 25%,#424857 50%,#363c4e 75%);background-size:200% 100%}.theme-dark .skeleton-cell[data-v-41eda137]{background:#2a2e39!important}.theme-dark .heatmap-empty[data-v-41eda137],.theme-dark .indices-empty[data-v-41eda137],.theme-dark .indices-loading[data-v-41eda137]{color:#64748b} \ No newline at end of file diff --git a/frontend/dist/css/127.340147b1.css b/frontend/dist/css/127.340147b1.css new file mode 100644 index 0000000..bb88163 --- /dev/null +++ b/frontend/dist/css/127.340147b1.css @@ -0,0 +1 @@ +.profile-page[data-v-6dceb76a]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-6dceb76a]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-6dceb76a]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-6dceb76a]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .profile-card-col[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-col[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-6dceb76a]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-6dceb76a] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-6dceb76a] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-6dceb76a]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-6dceb76a]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-6dceb76a] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-6dceb76a]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-6dceb76a]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-6dceb76a]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-6dceb76a]{margin:0}.profile-page .profile-card .profile-info[data-v-6dceb76a]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-6dceb76a]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-6dceb76a]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-6dceb76a]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-6dceb76a]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-6dceb76a],.profile-page .edit-card .profile-form[data-v-6dceb76a]{max-width:500px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input-password,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-6dceb76a],.profile-page .edit-card .profile-form .email-hint[data-v-6dceb76a]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-6dceb76a],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-6dceb76a]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-6dceb76a]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-6dceb76a]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-6dceb76a]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-6dceb76a]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-6dceb76a] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-6dceb76a] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-6dceb76a]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-6dceb76a]{font-size:18px}.profile-page .credits-card .credits-body[data-v-6dceb76a]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-6dceb76a]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-6dceb76a]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-6dceb76a]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-6dceb76a]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-6dceb76a]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-6dceb76a]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-6dceb76a]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-6dceb76a]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-6dceb76a] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-6dceb76a] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-6dceb76a]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-6dceb76a]{font-size:18px}.profile-page .referral-card .referral-body[data-v-6dceb76a]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-6dceb76a]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-6dceb76a]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-6dceb76a]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-6dceb76a]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-6dceb76a]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-6dceb76a]{color:gold}.profile-page .referral-user-cell[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-6dceb76a]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-6dceb76a]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-6dceb76a]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-6dceb76a]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-6dceb76a]{color:#52c41a}.profile-page .test-result-msg.error[data-v-6dceb76a]{color:#f5222d}.profile-page.theme-dark[data-v-6dceb76a]{background:-webkit-gradient(linear,left top,left bottom,from(#141414),to(#1c1c1c));background:linear-gradient(180deg,#141414,#1c1c1c)}.profile-page.theme-dark .page-header .page-title[data-v-6dceb76a]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-6dceb76a],.profile-page.theme-dark .profile-card[data-v-6dceb76a]{background:#1c1c1c;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-6dceb76a] .ant-card-body{background:#1c1c1c}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-6dceb76a]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-6dceb76a]{border-bottom-color:#2a2a2a}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-6dceb76a]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-bar{border-bottom-color:#2a2a2a}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-6dceb76a]{background:linear-gradient(135deg,#1c1c1c,#1a1a1a 50%,#141414);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-6dceb76a] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-6dceb76a]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table{background:#1c1c1c;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2a2a;color:#c9d1d9;border-bottom-color:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1c1c1c;color:#c9d1d9;border-bottom-color:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-placeholder{background:#1c1c1c;color:#8b949e}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-6dceb76a],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-6dceb76a],.profile-page.theme-dark .password-form .email-hint[data-v-6dceb76a],.profile-page.theme-dark .password-form .field-hint[data-v-6dceb76a],.profile-page.theme-dark .profile-form .email-hint[data-v-6dceb76a],.profile-page.theme-dark .profile-form .field-hint[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-6dceb76a],.profile-page.theme-dark .password-form .email-warning[data-v-6dceb76a],.profile-page.theme-dark .profile-form .email-warning[data-v-6dceb76a]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-alert{background:#1c1c1c;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-6dceb76a],.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-6dceb76a]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-6dceb76a]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-6dceb76a]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark[data-v-6dceb76a] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-tag.ant-tag-has-color{color:#fff!important;border-color:transparent!important}.profile-page.theme-dark[data-v-6dceb76a] .ant-input-prefix .anticon,.profile-page.theme-dark[data-v-6dceb76a] .ant-input-suffix .anticon,.profile-page.theme-dark[data-v-6dceb76a] .credits-hint .anticon,.profile-page.theme-dark[data-v-6dceb76a] .email-hint .anticon,.profile-page.theme-dark[data-v-6dceb76a] .field-hint .anticon,.profile-page.theme-dark[data-v-6dceb76a] .notification-settings-form .anticon{color:#c9d1d9!important}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item{background:#1c1c1c;border-color:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1c1c1c;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-options .ant-select-selector{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-btn.ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-6dceb76a]{padding:12px}.profile-page .page-header[data-v-6dceb76a]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-6dceb76a]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{font-size:22px}.profile-page .page-header .page-desc[data-v-6dceb76a]{font-size:13px}.profile-page .profile-cards-row[data-v-6dceb76a]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-6dceb76a]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-6dceb76a]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-6dceb76a]{margin-bottom:12px}.profile-page .profile-card[data-v-6dceb76a]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-6dceb76a]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-6dceb76a] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-6dceb76a]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-6dceb76a]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-6dceb76a]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-6dceb76a]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-6dceb76a]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-6dceb76a]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-6dceb76a]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-6dceb76a]{font-size:16px}.profile-page .credits-card .credits-body[data-v-6dceb76a]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-6dceb76a]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-6dceb76a]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-6dceb76a]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-6dceb76a]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-6dceb76a]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-6dceb76a]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-6dceb76a]{font-size:16px}.profile-page .referral-card .referral-body[data-v-6dceb76a]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-6dceb76a]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-6dceb76a],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-6dceb76a]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-6dceb76a]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-6dceb76a]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-6dceb76a] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-6dceb76a],.profile-page .edit-card .profile-form[data-v-6dceb76a]{max-width:100%}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input-password,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-6dceb76a],.profile-page .edit-card .profile-form .email-hint[data-v-6dceb76a]{font-size:11px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-6dceb76a]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-6dceb76a] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-6dceb76a] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-6dceb76a]{gap:8px}.profile-page .referral-user-cell[data-v-6dceb76a] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-6dceb76a]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-6dceb76a]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-6dceb76a]{padding:8px}.profile-page .page-header[data-v-6dceb76a]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-6dceb76a]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-6dceb76a]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-6dceb76a]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-6dceb76a]{font-size:20px}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/158.e48d5d81.css b/frontend/dist/css/158.e48d5d81.css deleted file mode 100644 index fdd2b37..0000000 --- a/frontend/dist/css/158.e48d5d81.css +++ /dev/null @@ -1 +0,0 @@ -.profile-page[data-v-86a53e9c]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-86a53e9c]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-86a53e9c]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-86a53e9c]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-86a53e9c]{margin:0}.profile-page .profile-card .profile-info[data-v-86a53e9c]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:500px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-86a53e9c]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-86a53e9c]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-86a53e9c]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-86a53e9c]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-86a53e9c]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-86a53e9c]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-86a53e9c]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-86a53e9c]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-86a53e9c]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-86a53e9c]{color:gold}.profile-page .referral-user-cell[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-86a53e9c]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-86a53e9c]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark[data-v-86a53e9c]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.profile-page.theme-dark .page-header .page-title[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c],.profile-page.theme-dark .profile-card[data-v-86a53e9c]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-86a53e9c] .ant-card-body{background:#1e222d}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-86a53e9c]{border-bottom-color:#30363d}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-bar{border-bottom-color:#30363d}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-86a53e9c]{background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table{background:#1e222d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2e39;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1e222d;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2e39}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-placeholder{background:#1e222d;color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .field-hint[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-warning[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-86a53e9c]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item{background:#1e222d;border-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-options .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-86a53e9c]{padding:12px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:22px}.profile-page .page-header .page-desc[data-v-86a53e9c]{font-size:13px}.profile-page .profile-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-card[data-v-86a53e9c]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-86a53e9c] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-86a53e9c]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-86a53e9c]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-86a53e9c] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:100%}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{font-size:11px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-86a53e9c]{gap:8px}.profile-page .referral-user-cell[data-v-86a53e9c] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-86a53e9c]{padding:8px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:20px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/55.9a2b4136.css b/frontend/dist/css/18.8f36e18e.css similarity index 59% rename from frontend/dist/css/55.9a2b4136.css rename to frontend/dist/css/18.8f36e18e.css index 5240392..a46749f 100644 --- a/frontend/dist/css/55.9a2b4136.css +++ b/frontend/dist/css/18.8f36e18e.css @@ -1 +1 @@ -.billing-page[data-v-0cdd5f9c]{padding:18px}.billing-page .page-header[data-v-0cdd5f9c]{margin-bottom:14px}.billing-page .page-header .page-title[data-v-0cdd5f9c]{margin:0;font-size:18px;font-weight:700;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;color:rgba(0,0,0,.85)}.billing-page .page-header .page-desc[data-v-0cdd5f9c]{margin:6px 0 0;color:rgba(0,0,0,.45)}.billing-page .snapshot-card .snapshot-row[data-v-0cdd5f9c]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:18px;-ms-flex-wrap:wrap;flex-wrap:wrap}.billing-page .snapshot-card .snap-item[data-v-0cdd5f9c]{min-width:220px}.billing-page .snapshot-card .snap-item .snap-label[data-v-0cdd5f9c]{color:rgba(0,0,0,.45);font-size:12px}.billing-page .snapshot-card .snap-item .snap-value[data-v-0cdd5f9c]{font-size:18px;font-weight:700;margin-top:2px}.billing-page .snapshot-card .snap-item .vip-exp[data-v-0cdd5f9c]{margin-left:8px;color:rgba(0,0,0,.55);font-size:12px}.billing-page .plan-card[data-v-0cdd5f9c]{border-radius:10px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06);margin-top:12px}.billing-page .plan-card.highlight[data-v-0cdd5f9c]{border:1px solid rgba(24,144,255,.35)}.billing-page .plan-card .plan-title[data-v-0cdd5f9c]{font-weight:700;font-size:16px;color:rgba(0,0,0,.85)}.billing-page .plan-card .plan-price[data-v-0cdd5f9c]{margin-top:10px;font-size:28px;font-weight:800;color:rgba(0,0,0,.85)}.billing-page .plan-card .plan-price .plan-unit[data-v-0cdd5f9c]{font-size:12px;font-weight:500;color:rgba(0,0,0,.45);margin-left:6px}.billing-page .plan-card .plan-benefit[data-v-0cdd5f9c]{margin:10px 0 16px;color:rgba(0,0,0,.65);font-weight:600}.billing-page.theme-dark .page-header .page-title[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.9)}.billing-page.theme-dark .page-header .page-desc[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.55)}.billing-page.theme-dark .snapshot-card[data-v-0cdd5f9c]{background:#161b22}.billing-page.theme-dark .snapshot-card .snap-item .snap-label[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.55)}.billing-page.theme-dark .snapshot-card .snap-item .snap-value[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.9)}.billing-page.theme-dark .snapshot-card .snap-item .vip-exp[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.6)}.billing-page.theme-dark .plan-card[data-v-0cdd5f9c]{background:#161b22;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.billing-page.theme-dark .plan-card .plan-price[data-v-0cdd5f9c],.billing-page.theme-dark .plan-card .plan-title[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.9)}.billing-page.theme-dark .plan-card .plan-price .plan-unit[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.55)}.billing-page.theme-dark .plan-card .plan-benefit[data-v-0cdd5f9c]{color:hsla(0,0%,100%,.7)}.usdt-pay-modal-wrap .ant-modal-header{display:none}.usdt-pay-modal-wrap .ant-modal-body{padding:0!important}.usdt-pay-modal-wrap .ant-modal-content{border-radius:16px;overflow:hidden}.usdt-checkout .checkout-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,#26a17b,#1b8a6b)}.usdt-checkout .checkout-header,.usdt-checkout .checkout-header .header-left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-header .header-left{gap:12px}.usdt-checkout .checkout-header .header-left .usdt-logo{width:40px;height:40px;border-radius:50%;background:hsla(0,0%,100%,.18);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-negative:0;flex-shrink:0}.usdt-checkout .checkout-header .header-left .header-text .header-title{font-size:16px;font-weight:800;color:#fff}.usdt-checkout .checkout-header .header-left .header-text .header-desc{font-size:12px;color:hsla(0,0%,100%,.75);margin-top:2px;line-height:1.4}.usdt-checkout .checkout-header .close-btn{color:hsla(0,0%,100%,.8)!important;font-size:18px}.usdt-checkout .checkout-header .close-btn:hover{color:#fff!important}.usdt-checkout .checkout-steps{padding:16px 24px 12px}.usdt-checkout .checkout-steps,.usdt-checkout .checkout-steps .step-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-steps .step-item{gap:6px}.usdt-checkout .checkout-steps .step-item .step-dot{position:relative;width:18px;height:18px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.usdt-checkout .checkout-steps .step-item .step-dot .dot-inner{width:10px;height:10px;border-radius:50%;background:#d9d9d9;-webkit-transition:all .3s;transition:all .3s}.usdt-checkout .checkout-steps .step-item .step-dot .dot-pulse{position:absolute;width:18px;height:18px;border-radius:50%;background:rgba(38,161,123,.35);-webkit-animation:pulse-ring 1.5s ease-out infinite;animation:pulse-ring 1.5s ease-out infinite}.usdt-checkout .checkout-steps .step-item .step-label{font-size:12px;color:rgba(0,0,0,.35);font-weight:500;white-space:nowrap;-webkit-transition:all .3s;transition:all .3s}.usdt-checkout .checkout-steps .step-item .step-line{-webkit-box-flex:1;-ms-flex:1;flex:1;height:2px;min-width:30px;background:#e8e8e8;margin:0 6px;border-radius:1px;-webkit-transition:all .3s;transition:all .3s}.usdt-checkout .checkout-steps .step-item .step-line.filled,.usdt-checkout .checkout-steps .step-item.active .dot-inner{background:#26a17b}.usdt-checkout .checkout-steps .step-item.active .step-label{color:rgba(0,0,0,.85);font-weight:700}.usdt-checkout .checkout-steps .step-item.current .dot-inner{background:#26a17b;-webkit-box-shadow:0 0 0 3px rgba(38,161,123,.2);box-shadow:0 0 0 3px rgba(38,161,123,.2)}@-webkit-keyframes pulse-ring{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:1}to{-webkit-transform:scale(1.8);transform:scale(1.8);opacity:0}}@keyframes pulse-ring{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:1}to{-webkit-transform:scale(1.8);transform:scale(1.8);opacity:0}}.usdt-checkout .checkout-body{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px;padding:4px 24px 16px}.usdt-checkout .checkout-body .qr-section{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0}.usdt-checkout .checkout-body .qr-section,.usdt-checkout .checkout-body .qr-section .qr-frame{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-body .qr-section .qr-frame{width:180px;height:180px;padding:8px;border-radius:14px;background:#fff;border:2px solid #e8e8e8;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;-webkit-transition:border-color .4s;transition:border-color .4s;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.06);box-shadow:0 4px 20px rgba(0,0,0,.06)}.usdt-checkout .checkout-body .qr-section .qr-frame img{width:100%;height:100%;border-radius:8px}.usdt-checkout .checkout-body .qr-section .qr-frame.qr-confirmed{border-color:#26a17b}.usdt-checkout .checkout-body .qr-section .qr-frame.qr-confirmed:after{content:"\2713";position:absolute;top:-10px;right:-10px;width:28px;height:28px;background:#26a17b;color:#fff;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:16px;font-weight:700;-webkit-box-shadow:0 2px 8px rgba(38,161,123,.4);box-shadow:0 2px 8px rgba(38,161,123,.4)}.usdt-checkout .checkout-body .qr-section .qr-amount{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:4px}.usdt-checkout .checkout-body .qr-section .qr-amount .amt-number{font-size:22px;font-weight:900;color:rgba(0,0,0,.88);letter-spacing:-.5px}.usdt-checkout .checkout-body .qr-section .qr-amount .amt-currency{font-size:12px;font-weight:700;color:rgba(0,0,0,.45)}.usdt-checkout .checkout-body .qr-section .qr-chain{margin-top:4px}.usdt-checkout .checkout-body .info-section{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.usdt-checkout .checkout-body .info-section .info-block{margin-bottom:14px}.usdt-checkout .checkout-body .info-section .info-block .info-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;font-size:12px;color:rgba(0,0,0,.45);font-weight:600;margin-bottom:6px}.usdt-checkout .checkout-body .info-section .addr-box,.usdt-checkout .checkout-body .info-section .amt-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;background:#f6f8fa;border:1px solid #e8e8e8;border-radius:8px;padding:8px 10px}.usdt-checkout .checkout-body .info-section .addr-box code,.usdt-checkout .checkout-body .info-section .amt-box code{-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Courier New,monospace;font-size:12px;color:rgba(0,0,0,.78);word-break:break-all;line-height:1.5;background:none;border:none;padding:0}.usdt-checkout .checkout-body .info-section .addr-box .copy-btn,.usdt-checkout .checkout-body .info-section .amt-box .copy-btn{-ms-flex-negative:0;flex-shrink:0;border:none;background:rgba(0,0,0,.04);color:rgba(0,0,0,.55);border-radius:6px}.usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.08);color:#1890ff}.usdt-checkout .checkout-body .info-section .warn-strip{gap:8px;padding:8px 12px;border-radius:8px;background:rgba(250,173,20,.08);border:1px solid rgba(250,173,20,.2);font-size:12px;font-weight:600;color:#d48806;margin-bottom:14px}.usdt-checkout .checkout-body .info-section .meta-row,.usdt-checkout .checkout-body .info-section .warn-strip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-body .info-section .meta-row{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.usdt-checkout .checkout-body .info-section .meta-row .meta-expire{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;font-size:12px;color:rgba(0,0,0,.45)}.usdt-checkout .checkout-body .info-section .confirmed-hint,.usdt-checkout .checkout-body .info-section .expired-hint{margin-top:12px}.usdt-checkout .checkout-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 24px 16px;border-top:1px solid rgba(0,0,0,.06)}@media (max-width:560px){.usdt-checkout .checkout-body{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-body .info-section{width:100%}}.theme-dark .usdt-checkout .checkout-header,body.realdark .usdt-checkout .checkout-header{background:linear-gradient(135deg,#1a7a5a,#145c45)}.theme-dark .usdt-checkout .checkout-steps .step-item .step-label,body.realdark .usdt-checkout .checkout-steps .step-item .step-label{color:hsla(0,0%,100%,.35)}.theme-dark .usdt-checkout .checkout-steps .step-item .step-line,body.realdark .usdt-checkout .checkout-steps .step-item .step-line{background:hsla(0,0%,100%,.12)}.theme-dark .usdt-checkout .checkout-steps .step-item .step-line.filled,body.realdark .usdt-checkout .checkout-steps .step-item .step-line.filled{background:#26a17b}.theme-dark .usdt-checkout .checkout-steps .step-item.active .step-label,body.realdark .usdt-checkout .checkout-steps .step-item.active .step-label{color:hsla(0,0%,100%,.9)}.theme-dark .usdt-checkout .checkout-steps .step-item .dot-inner,body.realdark .usdt-checkout .checkout-steps .step-item .dot-inner{background:hsla(0,0%,100%,.2)}.theme-dark .usdt-checkout .checkout-steps .step-item.active .dot-inner,body.realdark .usdt-checkout .checkout-steps .step-item.active .dot-inner{background:#26a17b}.theme-dark .usdt-checkout .checkout-body .qr-section .qr-frame,body.realdark .usdt-checkout .checkout-body .qr-section .qr-frame{background:#1a1f28;border-color:hsla(0,0%,100%,.1);-webkit-box-shadow:0 4px 20px rgba(0,0,0,.3);box-shadow:0 4px 20px rgba(0,0,0,.3)}.theme-dark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-number,body.realdark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-number{color:hsla(0,0%,100%,.9)}.theme-dark .usdt-checkout .checkout-body .info-section .info-block .info-label,.theme-dark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-currency,body.realdark .usdt-checkout .checkout-body .info-section .info-block .info-label,body.realdark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-currency{color:hsla(0,0%,100%,.5)}.theme-dark .usdt-checkout .checkout-body .info-section .addr-box,.theme-dark .usdt-checkout .checkout-body .info-section .amt-box,body.realdark .usdt-checkout .checkout-body .info-section .addr-box,body.realdark .usdt-checkout .checkout-body .info-section .amt-box{background:hsla(0,0%,100%,.06);border-color:hsla(0,0%,100%,.1)}.theme-dark .usdt-checkout .checkout-body .info-section .addr-box code,.theme-dark .usdt-checkout .checkout-body .info-section .amt-box code,body.realdark .usdt-checkout .checkout-body .info-section .addr-box code,body.realdark .usdt-checkout .checkout-body .info-section .amt-box code{color:hsla(0,0%,100%,.8)}.theme-dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn,.theme-dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn{background:hsla(0,0%,100%,.08);color:hsla(0,0%,100%,.6)}.theme-dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.theme-dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.15);color:#40a9ff}.theme-dark .usdt-checkout .checkout-body .info-section .warn-strip,body.realdark .usdt-checkout .checkout-body .info-section .warn-strip{background:rgba(250,173,20,.1);border-color:rgba(250,173,20,.2);color:#faad14}.theme-dark .usdt-checkout .checkout-body .info-section .meta-row .meta-expire,body.realdark .usdt-checkout .checkout-body .info-section .meta-row .meta-expire{color:hsla(0,0%,100%,.45)}.theme-dark .usdt-checkout .checkout-footer,body.realdark .usdt-checkout .checkout-footer{border-top-color:hsla(0,0%,100%,.08)} \ No newline at end of file +.billing-page[data-v-714c882a]{padding:18px}.billing-page .page-header[data-v-714c882a]{margin-bottom:14px}.billing-page .page-header .page-title[data-v-714c882a]{margin:0;font-size:18px;font-weight:700;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;color:rgba(0,0,0,.85)}.billing-page .page-header .page-desc[data-v-714c882a]{margin:6px 0 0;color:rgba(0,0,0,.45)}.billing-page .snapshot-card .snapshot-row[data-v-714c882a]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:18px;-ms-flex-wrap:wrap;flex-wrap:wrap}.billing-page .snapshot-card .snap-item[data-v-714c882a]{min-width:220px}.billing-page .snapshot-card .snap-item .snap-label[data-v-714c882a]{color:rgba(0,0,0,.45);font-size:12px}.billing-page .snapshot-card .snap-item .snap-value[data-v-714c882a]{font-size:18px;font-weight:700;margin-top:2px}.billing-page .snapshot-card .snap-item .vip-exp[data-v-714c882a]{margin-left:8px;color:rgba(0,0,0,.55);font-size:12px}.billing-page .plan-card[data-v-714c882a]{border-radius:10px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06);margin-top:12px}.billing-page .plan-card.highlight[data-v-714c882a]{border:1px solid rgba(24,144,255,.35)}.billing-page .plan-card .plan-title[data-v-714c882a]{font-weight:700;font-size:16px;color:rgba(0,0,0,.85)}.billing-page .plan-card .plan-price[data-v-714c882a]{margin-top:10px;font-size:28px;font-weight:800;color:rgba(0,0,0,.85)}.billing-page .plan-card .plan-price .plan-unit[data-v-714c882a]{font-size:12px;font-weight:500;color:rgba(0,0,0,.45);margin-left:6px}.billing-page .plan-card .plan-benefit[data-v-714c882a]{margin:10px 0 16px;color:rgba(0,0,0,.65);font-weight:600}.billing-page.theme-dark .page-header .page-title[data-v-714c882a]{color:hsla(0,0%,100%,.9)}.billing-page.theme-dark .page-header .page-desc[data-v-714c882a]{color:hsla(0,0%,100%,.55)}.billing-page.theme-dark .snapshot-card[data-v-714c882a]{background:#1c1c1c}.billing-page.theme-dark .snapshot-card .snap-item .snap-label[data-v-714c882a]{color:hsla(0,0%,100%,.55)}.billing-page.theme-dark .snapshot-card .snap-item .snap-value[data-v-714c882a]{color:hsla(0,0%,100%,.9)}.billing-page.theme-dark .snapshot-card .snap-item .vip-exp[data-v-714c882a]{color:hsla(0,0%,100%,.6)}.billing-page.theme-dark .plan-card[data-v-714c882a]{background:#1c1c1c;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.billing-page.theme-dark .plan-card .plan-price[data-v-714c882a],.billing-page.theme-dark .plan-card .plan-title[data-v-714c882a]{color:hsla(0,0%,100%,.9)}.billing-page.theme-dark .plan-card .plan-price .plan-unit[data-v-714c882a]{color:hsla(0,0%,100%,.55)}.billing-page.theme-dark .plan-card .plan-benefit[data-v-714c882a]{color:hsla(0,0%,100%,.7)}.usdt-pay-modal-wrap .ant-modal-header{display:none}.usdt-pay-modal-wrap .ant-modal-body{padding:0!important}.usdt-pay-modal-wrap .ant-modal-content{border-radius:16px;overflow:hidden}.usdt-checkout .checkout-header{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,#26a17b,#1b8a6b)}.usdt-checkout .checkout-header,.usdt-checkout .checkout-header .header-left{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-header .header-left{gap:12px}.usdt-checkout .checkout-header .header-left .usdt-logo{width:40px;height:40px;border-radius:50%;background:hsla(0,0%,100%,.18);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-negative:0;flex-shrink:0}.usdt-checkout .checkout-header .header-left .header-text .header-title{font-size:16px;font-weight:800;color:#fff}.usdt-checkout .checkout-header .header-left .header-text .header-desc{font-size:12px;color:hsla(0,0%,100%,.75);margin-top:2px;line-height:1.4}.usdt-checkout .checkout-header .close-btn{color:hsla(0,0%,100%,.8)!important;font-size:18px}.usdt-checkout .checkout-header .close-btn:hover{color:#fff!important}.usdt-checkout .checkout-steps{padding:16px 24px 12px}.usdt-checkout .checkout-steps,.usdt-checkout .checkout-steps .step-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-steps .step-item{gap:6px}.usdt-checkout .checkout-steps .step-item .step-dot{position:relative;width:18px;height:18px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.usdt-checkout .checkout-steps .step-item .step-dot .dot-inner{width:10px;height:10px;border-radius:50%;background:#d9d9d9;-webkit-transition:all .3s;transition:all .3s}.usdt-checkout .checkout-steps .step-item .step-dot .dot-pulse{position:absolute;width:18px;height:18px;border-radius:50%;background:rgba(38,161,123,.35);-webkit-animation:pulse-ring 1.5s ease-out infinite;animation:pulse-ring 1.5s ease-out infinite}.usdt-checkout .checkout-steps .step-item .step-label{font-size:12px;color:rgba(0,0,0,.35);font-weight:500;white-space:nowrap;-webkit-transition:all .3s;transition:all .3s}.usdt-checkout .checkout-steps .step-item .step-line{-webkit-box-flex:1;-ms-flex:1;flex:1;height:2px;min-width:30px;background:#e8e8e8;margin:0 6px;border-radius:1px;-webkit-transition:all .3s;transition:all .3s}.usdt-checkout .checkout-steps .step-item .step-line.filled,.usdt-checkout .checkout-steps .step-item.active .dot-inner{background:#26a17b}.usdt-checkout .checkout-steps .step-item.active .step-label{color:rgba(0,0,0,.85);font-weight:700}.usdt-checkout .checkout-steps .step-item.current .dot-inner{background:#26a17b;-webkit-box-shadow:0 0 0 3px rgba(38,161,123,.2);box-shadow:0 0 0 3px rgba(38,161,123,.2)}@-webkit-keyframes pulse-ring{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:1}to{-webkit-transform:scale(1.8);transform:scale(1.8);opacity:0}}@keyframes pulse-ring{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:1}to{-webkit-transform:scale(1.8);transform:scale(1.8);opacity:0}}.usdt-checkout .checkout-body{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px;padding:4px 24px 16px}.usdt-checkout .checkout-body .qr-section{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0}.usdt-checkout .checkout-body .qr-section,.usdt-checkout .checkout-body .qr-section .qr-frame{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-body .qr-section .qr-frame{width:180px;height:180px;padding:8px;border-radius:14px;background:#fff;border:2px solid #e8e8e8;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;-webkit-transition:border-color .4s;transition:border-color .4s;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.06);box-shadow:0 4px 20px rgba(0,0,0,.06)}.usdt-checkout .checkout-body .qr-section .qr-frame img{width:100%;height:100%;border-radius:8px}.usdt-checkout .checkout-body .qr-section .qr-frame.qr-confirmed{border-color:#26a17b}.usdt-checkout .checkout-body .qr-section .qr-frame.qr-confirmed:after{content:"\2713";position:absolute;top:-10px;right:-10px;width:28px;height:28px;background:#26a17b;color:#fff;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:16px;font-weight:700;-webkit-box-shadow:0 2px 8px rgba(38,161,123,.4);box-shadow:0 2px 8px rgba(38,161,123,.4)}.usdt-checkout .checkout-body .qr-section .qr-amount{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:4px}.usdt-checkout .checkout-body .qr-section .qr-amount .amt-number{font-size:22px;font-weight:900;color:rgba(0,0,0,.88);letter-spacing:-.5px}.usdt-checkout .checkout-body .qr-section .qr-amount .amt-currency{font-size:12px;font-weight:700;color:rgba(0,0,0,.45)}.usdt-checkout .checkout-body .qr-section .qr-chain{margin-top:4px}.usdt-checkout .checkout-body .info-section{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.usdt-checkout .checkout-body .info-section .info-block{margin-bottom:14px}.usdt-checkout .checkout-body .info-section .info-block .info-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;font-size:12px;color:rgba(0,0,0,.45);font-weight:600;margin-bottom:6px}.usdt-checkout .checkout-body .info-section .addr-box,.usdt-checkout .checkout-body .info-section .amt-box{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;background:#f6f8fa;border:1px solid #e8e8e8;border-radius:8px;padding:8px 10px}.usdt-checkout .checkout-body .info-section .addr-box code,.usdt-checkout .checkout-body .info-section .amt-box code{-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Courier New,monospace;font-size:12px;color:rgba(0,0,0,.78);word-break:break-all;line-height:1.5;background:none;border:none;padding:0}.usdt-checkout .checkout-body .info-section .addr-box .copy-btn,.usdt-checkout .checkout-body .info-section .amt-box .copy-btn{-ms-flex-negative:0;flex-shrink:0;border:none;background:rgba(0,0,0,.04);color:rgba(0,0,0,.55);border-radius:6px}.usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.08);color:#1890ff}.usdt-checkout .checkout-body .info-section .warn-strip{gap:8px;padding:8px 12px;border-radius:8px;background:rgba(250,173,20,.08);border:1px solid rgba(250,173,20,.2);font-size:12px;font-weight:600;color:#d48806;margin-bottom:14px}.usdt-checkout .checkout-body .info-section .meta-row,.usdt-checkout .checkout-body .info-section .warn-strip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-body .info-section .meta-row{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.usdt-checkout .checkout-body .info-section .meta-row .meta-expire{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;font-size:12px;color:rgba(0,0,0,.45)}.usdt-checkout .checkout-body .info-section .confirmed-hint,.usdt-checkout .checkout-body .info-section .expired-hint{margin-top:12px}.usdt-checkout .checkout-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 24px 16px;border-top:1px solid rgba(0,0,0,.06)}@media (max-width:560px){.usdt-checkout .checkout-body{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.usdt-checkout .checkout-body .info-section{width:100%}}body.dark .usdt-pay-modal-wrap .ant-modal-content,body.realdark .usdt-pay-modal-wrap .ant-modal-content{background:#1c1c1c}body.dark .usdt-checkout .checkout-header,body.realdark .usdt-checkout .checkout-header{background:linear-gradient(135deg,#1a7a5a,#145c45)}body.dark .usdt-checkout .checkout-steps .step-item .step-label,body.realdark .usdt-checkout .checkout-steps .step-item .step-label{color:hsla(0,0%,100%,.35)}body.dark .usdt-checkout .checkout-steps .step-item .step-line,body.realdark .usdt-checkout .checkout-steps .step-item .step-line{background:hsla(0,0%,100%,.12)}body.dark .usdt-checkout .checkout-steps .step-item .step-line.filled,body.realdark .usdt-checkout .checkout-steps .step-item .step-line.filled{background:#26a17b}body.dark .usdt-checkout .checkout-steps .step-item.active .step-label,body.realdark .usdt-checkout .checkout-steps .step-item.active .step-label{color:hsla(0,0%,100%,.9)}body.dark .usdt-checkout .checkout-steps .step-item .dot-inner,body.realdark .usdt-checkout .checkout-steps .step-item .dot-inner{background:hsla(0,0%,100%,.2)}body.dark .usdt-checkout .checkout-steps .step-item.active .dot-inner,body.realdark .usdt-checkout .checkout-steps .step-item.active .dot-inner{background:#26a17b}body.dark .usdt-checkout .checkout-body .qr-section .qr-frame,body.realdark .usdt-checkout .checkout-body .qr-section .qr-frame{background:#252525;border-color:hsla(0,0%,100%,.1);-webkit-box-shadow:0 4px 20px rgba(0,0,0,.3);box-shadow:0 4px 20px rgba(0,0,0,.3)}body.dark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-number,body.realdark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-number{color:hsla(0,0%,100%,.9)}body.dark .usdt-checkout .checkout-body .info-section .info-block .info-label,body.dark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-currency,body.realdark .usdt-checkout .checkout-body .info-section .info-block .info-label,body.realdark .usdt-checkout .checkout-body .qr-section .qr-amount .amt-currency{color:hsla(0,0%,100%,.5)}body.dark .usdt-checkout .checkout-body .info-section .addr-box,body.dark .usdt-checkout .checkout-body .info-section .amt-box,body.realdark .usdt-checkout .checkout-body .info-section .addr-box,body.realdark .usdt-checkout .checkout-body .info-section .amt-box{background:hsla(0,0%,100%,.06);border-color:hsla(0,0%,100%,.1)}body.dark .usdt-checkout .checkout-body .info-section .addr-box code,body.dark .usdt-checkout .checkout-body .info-section .amt-box code,body.realdark .usdt-checkout .checkout-body .info-section .addr-box code,body.realdark .usdt-checkout .checkout-body .info-section .amt-box code{color:hsla(0,0%,100%,.8)}body.dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn,body.dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn{background:hsla(0,0%,100%,.08);color:hsla(0,0%,100%,.6)}body.dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.15);color:#40a9ff}body.dark .usdt-checkout .checkout-body .info-section .warn-strip,body.realdark .usdt-checkout .checkout-body .info-section .warn-strip{background:rgba(250,173,20,.1);border-color:rgba(250,173,20,.2);color:#faad14}body.dark .usdt-checkout .checkout-body .info-section .meta-row .meta-expire,body.realdark .usdt-checkout .checkout-body .info-section .meta-row .meta-expire{color:hsla(0,0%,100%,.45)}body.dark .usdt-checkout .checkout-footer,body.realdark .usdt-checkout .checkout-footer{border-top-color:hsla(0,0%,100%,.08)}body.dark .usdt-checkout .checkout-footer .ant-btn:not(.ant-btn-primary),body.realdark .usdt-checkout .checkout-footer .ant-btn:not(.ant-btn-primary){background:hsla(0,0%,100%,.08);border-color:hsla(0,0%,100%,.15);color:hsla(0,0%,100%,.8)}body.dark .usdt-checkout .checkout-footer .ant-btn:not(.ant-btn-primary):hover,body.realdark .usdt-checkout .checkout-footer .ant-btn:not(.ant-btn-primary):hover{background:hsla(0,0%,100%,.12);border-color:hsla(0,0%,100%,.25);color:#fff} \ No newline at end of file diff --git a/frontend/dist/css/206.136e873f.css b/frontend/dist/css/206.136e873f.css new file mode 100644 index 0000000..d950081 --- /dev/null +++ b/frontend/dist/css/206.136e873f.css @@ -0,0 +1 @@ +.dashboard-pro[data-v-7ff4e505]{min-height:100vh;padding:20px;background:#f8fafc;-webkit-transition:background .3s;transition:background .3s}.dashboard-pro.theme-dark[data-v-7ff4e505]{background:#141414}.dashboard-pro.theme-dark .kpi-card[data-v-7ff4e505]{background:#1c1c1c;border-color:#2a2a2a}.dashboard-pro.theme-dark .kpi-card .kpi-label[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .kpi-card .kpi-value .amount[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .kpi-card .kpi-sub[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .chart-panel[data-v-7ff4e505],.dashboard-pro.theme-dark .table-panel[data-v-7ff4e505]{background:#1c1c1c;border-color:#2a2a2a}.dashboard-pro.theme-dark .chart-panel .panel-header[data-v-7ff4e505],.dashboard-pro.theme-dark .table-panel .panel-header[data-v-7ff4e505]{border-color:#2a2a2a}.dashboard-pro.theme-dark .chart-panel .panel-header .panel-title[data-v-7ff4e505],.dashboard-pro.theme-dark .table-panel .panel-header .panel-title[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card[data-v-7ff4e505]{background:hsla(0,0%,100%,.03);border-color:#2a2a2a}.dashboard-pro.theme-dark .ranking-card .rank-name[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card .rank-stats label[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .calendar-nav .current-month[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .calendar-nav .ant-btn-link[data-v-7ff4e505],.dashboard-pro.theme-dark .profit-calendar .calendar-empty[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .profit-calendar .month-summary[data-v-7ff4e505]{background:hsla(0,0%,100%,.03)}.dashboard-pro.theme-dark .profit-calendar .calendar-weekdays .weekday[data-v-7ff4e505],.dashboard-pro.theme-dark .profit-calendar .month-summary .summary-label[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell[data-v-7ff4e505]{background:hsla(0,0%,100%,.03)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-7ff4e505]{background:hsla(0,0%,100%,.02)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.profit[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(34,197,94,.15),rgba(34,197,94,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.loss[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(239,68,68,.15),rgba(239,68,68,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.zero[data-v-7ff4e505]{background:hsla(0,0%,100%,.03)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table{background:transparent;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-thead>tr>th{background:#141414;color:#888;border-color:#2a2a2a}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-tbody>tr>td{border-color:#2a2a2a;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-tbody>tr:hover>td{background:#252525}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-placeholder{background:transparent}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-placeholder .ant-empty-description{color:#888}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-item{background:#1c1c1c;border-color:#2a2a2a}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-item a{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:#3b82f6;border-color:#3b82f6}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1c1c1c;border-color:#2a2a2a;color:#f1f5f9}.dashboard-pro .kpi-grid[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}.dashboard-pro .kpi-card[data-v-7ff4e505]{position:relative;background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:20px;overflow:hidden;-webkit-transition:all .3s cubic-bezier(.4,0,.2,1);transition:all .3s cubic-bezier(.4,0,.2,1)}.dashboard-pro .kpi-card[data-v-7ff4e505]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 10px 40px rgba(0,0,0,.1);box-shadow:0 10px 40px rgba(0,0,0,.1)}.dashboard-pro .kpi-card.clickable[data-v-7ff4e505]{cursor:pointer}.dashboard-pro .kpi-card.clickable .card-arrow[data-v-7ff4e505]{position:absolute;right:16px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:.4;-webkit-transition:all .3s;transition:all .3s}.dashboard-pro .kpi-card.clickable:hover .card-arrow[data-v-7ff4e505]{opacity:1;right:12px}.dashboard-pro .kpi-card .kpi-glow[data-v-7ff4e505]{position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle,rgba(59,130,246,.15) 0,transparent 70%);pointer-events:none}.dashboard-pro .kpi-card .kpi-content[data-v-7ff4e505]{position:relative;z-index:1}.dashboard-pro .kpi-card .kpi-header[data-v-7ff4e505]{gap:8px;margin-bottom:12px}.dashboard-pro .kpi-card .kpi-header[data-v-7ff4e505],.dashboard-pro .kpi-card .kpi-icon[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .kpi-card .kpi-icon[data-v-7ff4e505]{width:32px;height:32px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;background:rgba(59,130,246,.1);color:#3b82f6;font-size:16px}.dashboard-pro .kpi-card .kpi-label[data-v-7ff4e505]{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .kpi-card .kpi-value[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:2px}.dashboard-pro .kpi-card .kpi-value .currency[data-v-7ff4e505]{font-size:18px;font-weight:500;color:#64748b}.dashboard-pro .kpi-card .kpi-value .amount[data-v-7ff4e505]{font-size:28px;font-weight:700;color:#1e293b;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.dashboard-pro .kpi-card .kpi-value .unit[data-v-7ff4e505]{font-size:14px;font-weight:500;color:#64748b;margin-left:4px}.dashboard-pro .kpi-card .kpi-sub[data-v-7ff4e505]{margin-top:8px;font-size:12px;color:#64748b}.dashboard-pro .kpi-card .kpi-sub .label[data-v-7ff4e505]{margin:0 2px}.dashboard-pro .kpi-card .kpi-sub .divider[data-v-7ff4e505]{margin:0 6px;opacity:.5}.dashboard-pro .kpi-card .kpi-sub .highlight[data-v-7ff4e505]{font-weight:600;color:#3b82f6}.dashboard-pro .kpi-card.kpi-primary[data-v-7ff4e505]{background:linear-gradient(135deg,#1e40af,#3b82f6 50%,#60a5fa);border:none}.dashboard-pro .kpi-card.kpi-primary .kpi-icon[data-v-7ff4e505]{background:hsla(0,0%,100%,.2);color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-label[data-v-7ff4e505]{color:hsla(0,0%,100%,.8)}.dashboard-pro .kpi-card.kpi-primary .kpi-value .amount[data-v-7ff4e505],.dashboard-pro .kpi-card.kpi-primary .kpi-value .currency[data-v-7ff4e505],.dashboard-pro .kpi-card.kpi-primary .kpi-value .unit[data-v-7ff4e505]{color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-sub[data-v-7ff4e505]{color:hsla(0,0%,100%,.7)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-7ff4e505]{position:absolute;right:12px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:60px;height:60px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg[data-v-7ff4e505]{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-bg[data-v-7ff4e505]{fill:none;stroke:rgba(16,185,129,.15);stroke-width:3}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-progress[data-v-7ff4e505]{fill:none;stroke:#10b981;stroke-width:3;stroke-linecap:round;-webkit-transition:stroke-dasharray .5s ease;transition:stroke-dasharray .5s ease}.dashboard-pro .kpi-card.kpi-win-rate .kpi-icon[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .kpi-card.kpi-profit-factor .kpi-icon[data-v-7ff4e505]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .kpi-card.kpi-drawdown .kpi-icon[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .kpi-card.kpi-drawdown .kpi-value .amount[data-v-7ff4e505]{color:#ef4444}.dashboard-pro .kpi-card.kpi-trades .kpi-icon[data-v-7ff4e505]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .kpi-card.kpi-strategies .kpi-icon[data-v-7ff4e505]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .chart-row[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .chart-row[data-v-7ff4e505]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .chart-panel[data-v-7ff4e505]{background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .chart-panel.chart-main[data-v-7ff4e505]{-webkit-box-flex:2;-ms-flex:2;flex:2}.dashboard-pro .chart-panel.chart-side[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:300px}.dashboard-pro .chart-panel.chart-half[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1}.dashboard-pro .chart-panel .panel-header[data-v-7ff4e505]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .chart-panel .panel-header[data-v-7ff4e505],.dashboard-pro .chart-panel .panel-title[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .chart-panel .panel-title[data-v-7ff4e505]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .chart-panel .panel-title .anticon[data-v-7ff4e505]{color:#3b82f6}.dashboard-pro .chart-panel .panel-legend[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;font-size:12px;color:#64748b}.dashboard-pro .chart-panel .panel-legend .legend-item[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot[data-v-7ff4e505]{width:10px;height:10px;border-radius:2px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.bar[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,left bottom,from(#34d399),to(#10b981));background:linear-gradient(180deg,#34d399,#10b981)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.line[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,right top,from(#3b82f6),to(#8b5cf6));background:linear-gradient(90deg,#3b82f6,#8b5cf6)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.loss[data-v-7ff4e505]{background:#ef4444}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.profit[data-v-7ff4e505]{background:#10b981}.dashboard-pro .chart-panel .panel-legend.calendar-legend[data-v-7ff4e505]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.dashboard-pro .chart-panel .panel-legend.calendar-legend .legend-gradient[data-v-7ff4e505]{width:80px;height:10px;border-radius:3px;background:-webkit-gradient(linear,left top,right top,from(#ef4444),color-stop(#fca5a5),color-stop(#f4f4f5),color-stop(#86efac),to(#22c55e));background:linear-gradient(90deg,#ef4444,#fca5a5,#f4f4f5,#86efac,#22c55e)}.dashboard-pro .chart-panel .panel-badge[data-v-7ff4e505]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .chart-panel .chart-body[data-v-7ff4e505]{height:320px;padding:16px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-7ff4e505]{height:220px}.dashboard-pro .chart-panel .chart-body.calendar-chart[data-v-7ff4e505]{height:280px}.dashboard-pro .chart-panel .calendar-nav[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.dashboard-pro .chart-panel .calendar-nav .current-month[data-v-7ff4e505]{font-size:14px;font-weight:600;color:#1e293b;min-width:80px;text-align:center}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-7ff4e505]{padding:0;height:auto;color:#64748b}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-7ff4e505]:hover:not(:disabled){color:#3b82f6}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-7ff4e505]:disabled{opacity:.3}.dashboard-pro .chart-panel .profit-calendar[data-v-7ff4e505]{padding:12px 16px;overflow:hidden}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-7ff4e505],.dashboard-pro .chart-panel .profit-calendar[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-7ff4e505]{height:280px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#64748b}.dashboard-pro .chart-panel .profit-calendar .calendar-empty .anticon[data-v-7ff4e505]{font-size:40px;margin-bottom:10px;opacity:.3}.dashboard-pro .chart-panel .profit-calendar .month-summary[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px;margin-bottom:10px;padding:8px 12px;background:rgba(241,245,249,.5);border-radius:8px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:2px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-label[data-v-7ff4e505]{font-size:10px;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value[data-v-7ff4e505]{font-size:15px;font-weight:700;font-family:JetBrains Mono,monospace}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.positive[data-v-7ff4e505]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.negative[data-v-7ff4e505]{color:#ef4444}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:4px}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays .weekday[data-v-7ff4e505]{text-align:center;font-size:10px;font-weight:600;color:#64748b;padding:4px 0}.dashboard-pro .chart-panel .profit-calendar .calendar-grid[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell[data-v-7ff4e505]{height:36px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:6px;background:rgba(241,245,249,.5);border:1px solid transparent;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.empty[data-v-7ff4e505]{background:transparent;border:none}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-7ff4e505]{background:rgba(241,245,249,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(34,197,94,.12),rgba(34,197,94,.2));border-color:rgba(34,197,94,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-7ff4e505]:hover{background:linear-gradient(135deg,rgba(34,197,94,.2),rgba(34,197,94,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(34,197,94,.2);box-shadow:0 4px 12px rgba(34,197,94,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(239,68,68,.12),rgba(239,68,68,.2));border-color:rgba(239,68,68,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-7ff4e505]:hover{background:linear-gradient(135deg,rgba(239,68,68,.2),rgba(239,68,68,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(239,68,68,.2);box-shadow:0 4px 12px rgba(239,68,68,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.zero[data-v-7ff4e505]{background:hsla(240,5%,65%,.1);border-color:hsla(240,5%,65%,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-7ff4e505]{font-size:11px;font-weight:600;color:#1e293b;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit[data-v-7ff4e505]{font-size:9px;font-weight:600;font-family:JetBrains Mono,monospace;margin-top:1px;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.positive[data-v-7ff4e505]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.negative[data-v-7ff4e505]{color:#ef4444}.dashboard-pro .strategy-ranking[data-v-7ff4e505]{padding:16px}.dashboard-pro .strategy-ranking .empty-state[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:40px;color:#64748b}.dashboard-pro .strategy-ranking .empty-state .anticon[data-v-7ff4e505]{font-size:40px;margin-bottom:12px;opacity:.3}.dashboard-pro .strategy-ranking .ranking-grid[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}.dashboard-pro .strategy-ranking .ranking-card[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:14px 16px;background:rgba(241,245,249,.5);border:1px solid #e2e8f0;border-radius:12px;position:relative;overflow:hidden}.dashboard-pro .strategy-ranking .ranking-card.rank-top[data-v-7ff4e505]{border-color:transparent;background:linear-gradient(135deg,rgba(59,130,246,.08),rgba(139,92,246,.08))}.dashboard-pro .strategy-ranking .ranking-card .rank-badge[data-v-7ff4e505]{width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;font-size:12px;font-weight:700;background:#64748b;color:#fff;-ms-flex-negative:0;flex-shrink:0}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-1[data-v-7ff4e505]{background:linear-gradient(135deg,#fbbf24,#f59e0b)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-2[data-v-7ff4e505]{background:linear-gradient(135deg,#9ca3af,#6b7280)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-3[data-v-7ff4e505]{background:linear-gradient(135deg,#cd7f32,#b87333)}.dashboard-pro .strategy-ranking .ranking-card .rank-info[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-name[data-v-7ff4e505]{font-size:13px;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-ms-flex-wrap:wrap;flex-wrap:wrap}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat[data-v-7ff4e505]{font-size:11px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat label[data-v-7ff4e505]{color:#64748b;margin-right:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar[data-v-7ff4e505]{position:absolute;bottom:0;left:0;right:0;height:3px;background:rgba(0,0,0,.05)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill[data-v-7ff4e505]{height:100%;border-radius:0 3px 3px 0;-webkit-transition:width .5s ease;transition:width .5s ease}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.positive[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,right top,from(#10b981),to(#34d399));background:linear-gradient(90deg,#10b981,#34d399)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.negative[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,right top,from(#ef4444),to(#f87171));background:linear-gradient(90deg,#ef4444,#f87171)}.dashboard-pro .table-row[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-top:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .table-row[data-v-7ff4e505]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .table-panel[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .table-panel .panel-header[data-v-7ff4e505]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .table-panel .panel-header[data-v-7ff4e505],.dashboard-pro .table-panel .panel-title[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .table-panel .panel-title[data-v-7ff4e505]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .table-panel .panel-title .anticon[data-v-7ff4e505]{color:#3b82f6}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-7ff4e505]{margin-left:8px;font-size:16px;cursor:pointer;color:#10b981;-webkit-transition:all .2s;transition:all .2s}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-7ff4e505]:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.dashboard-pro .table-panel .panel-title .sound-toggle.sound-off[data-v-7ff4e505]{color:#64748b}.dashboard-pro .table-panel .panel-badge[data-v-7ff4e505]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .orders-panel[data-v-7ff4e505]{margin-bottom:20px}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table{font-size:13px}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table-thead>tr>th{background:rgba(241,245,249,.8);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:#64748b;border-bottom:1px solid #e2e8f0;padding:12px 16px}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table-tbody>tr>td{padding:12px 16px;border-bottom:1px solid #e2e8f0}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table-tbody>tr:hover>td{background:rgba(59,130,246,.04)}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-pagination{padding:12px 16px;margin:0}.dashboard-pro .symbol-cell .symbol-name[data-v-7ff4e505]{font-weight:600;display:block}.dashboard-pro .symbol-cell .symbol-strategy[data-v-7ff4e505]{font-size:11px;color:#64748b}.dashboard-pro .side-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .side-tag.long[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .side-tag.short[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .type-tag.long[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .type-tag.short[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag.close-long[data-v-7ff4e505]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .type-tag.close-short[data-v-7ff4e505]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .symbol-tag[data-v-7ff4e505]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .exchange-tag[data-v-7ff4e505],.dashboard-pro .symbol-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .exchange-tag.binance[data-v-7ff4e505]{background:rgba(240,185,11,.1);color:#f0b90b}.dashboard-pro .exchange-tag.okx[data-v-7ff4e505]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .exchange-tag.bitget[data-v-7ff4e505]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .exchange-tag.signal[data-v-7ff4e505]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .market-type[data-v-7ff4e505]{font-size:10px;color:#64748b;margin-top:2px}.dashboard-pro .status-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .status-tag.pending[data-v-7ff4e505]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .status-tag.processing[data-v-7ff4e505]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .status-tag.completed[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .status-tag.failed[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .status-tag.cancelled[data-v-7ff4e505]{background:rgba(100,116,139,.1);color:#64748b}.dashboard-pro .error-hint[data-v-7ff4e505]{font-size:11px;color:#ef4444;margin-top:4px;cursor:pointer}.dashboard-pro .error-hint .anticon[data-v-7ff4e505]{margin-right:4px}.dashboard-pro .notify-icons[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.dashboard-pro .notify-icons .notify-icon[data-v-7ff4e505]{color:#64748b;font-size:14px}.dashboard-pro .pnl-cell[data-v-7ff4e505]{text-align:right}.dashboard-pro .pnl-cell .pnl-percent[data-v-7ff4e505]{display:block;font-size:11px}.dashboard-pro .time-cell[data-v-7ff4e505]{font-size:12px;color:#64748b}.dashboard-pro .sub-text[data-v-7ff4e505]{font-size:11px;color:#64748b}.dashboard-pro .text-muted[data-v-7ff4e505]{color:#64748b}.dashboard-pro .positive[data-v-7ff4e505]{color:#10b981}.dashboard-pro .negative[data-v-7ff4e505]{color:#ef4444}@media (max-width:768px){.dashboard-pro[data-v-7ff4e505]{padding:12px}.dashboard-pro .kpi-grid[data-v-7ff4e505]{grid-template-columns:repeat(2,1fr);gap:10px}.dashboard-pro .kpi-card[data-v-7ff4e505]{padding:14px}.dashboard-pro .kpi-card .kpi-value .amount[data-v-7ff4e505]{font-size:22px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-7ff4e505]{width:48px;height:48px;right:8px}.dashboard-pro .chart-panel .chart-body[data-v-7ff4e505]{height:260px;padding:12px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-7ff4e505]{height:180px}.dashboard-pro .ranking-grid[data-v-7ff4e505]{grid-template-columns:1fr}} \ No newline at end of file diff --git a/frontend/dist/css/221.340147b1.css b/frontend/dist/css/221.340147b1.css new file mode 100644 index 0000000..bb88163 --- /dev/null +++ b/frontend/dist/css/221.340147b1.css @@ -0,0 +1 @@ +.profile-page[data-v-6dceb76a]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-6dceb76a]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-6dceb76a]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-6dceb76a]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .profile-card-col[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-col[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-6dceb76a]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-6dceb76a] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-6dceb76a] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-6dceb76a]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-6dceb76a],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-6dceb76a]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-6dceb76a] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-6dceb76a]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-6dceb76a]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-6dceb76a]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-6dceb76a]{margin:0}.profile-page .profile-card .profile-info[data-v-6dceb76a]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-6dceb76a]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-6dceb76a]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-6dceb76a]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-6dceb76a]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-6dceb76a],.profile-page .edit-card .profile-form[data-v-6dceb76a]{max-width:500px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input-password,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-6dceb76a],.profile-page .edit-card .profile-form .email-hint[data-v-6dceb76a]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-6dceb76a],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-6dceb76a]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-6dceb76a]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-6dceb76a]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-6dceb76a]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-6dceb76a]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-6dceb76a] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-6dceb76a] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-6dceb76a]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-6dceb76a]{font-size:18px}.profile-page .credits-card .credits-body[data-v-6dceb76a]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-6dceb76a]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-6dceb76a]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-6dceb76a]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-6dceb76a]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-6dceb76a]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-6dceb76a]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-6dceb76a]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-6dceb76a]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-6dceb76a]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-6dceb76a] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-6dceb76a] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-6dceb76a]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-6dceb76a]{font-size:18px}.profile-page .referral-card .referral-body[data-v-6dceb76a]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-6dceb76a]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-6dceb76a]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-6dceb76a]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-6dceb76a]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-6dceb76a]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-6dceb76a]{color:gold}.profile-page .referral-user-cell[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-6dceb76a]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-6dceb76a]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-6dceb76a]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-6dceb76a]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-6dceb76a]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-6dceb76a]{color:#52c41a}.profile-page .test-result-msg.error[data-v-6dceb76a]{color:#f5222d}.profile-page.theme-dark[data-v-6dceb76a]{background:-webkit-gradient(linear,left top,left bottom,from(#141414),to(#1c1c1c));background:linear-gradient(180deg,#141414,#1c1c1c)}.profile-page.theme-dark .page-header .page-title[data-v-6dceb76a]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-6dceb76a],.profile-page.theme-dark .profile-card[data-v-6dceb76a]{background:#1c1c1c;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-6dceb76a] .ant-card-body{background:#1c1c1c}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-6dceb76a]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-6dceb76a]{border-bottom-color:#2a2a2a}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-6dceb76a]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-bar{border-bottom-color:#2a2a2a}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-6dceb76a]{background:linear-gradient(135deg,#1c1c1c,#1a1a1a 50%,#141414);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-6dceb76a] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-6dceb76a]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table{background:#1c1c1c;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2a2a;color:#c9d1d9;border-bottom-color:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1c1c1c;color:#c9d1d9;border-bottom-color:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-placeholder{background:#1c1c1c;color:#8b949e}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-6dceb76a] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-6dceb76a],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-6dceb76a],.profile-page.theme-dark .password-form .email-hint[data-v-6dceb76a],.profile-page.theme-dark .password-form .field-hint[data-v-6dceb76a],.profile-page.theme-dark .profile-form .email-hint[data-v-6dceb76a],.profile-page.theme-dark .profile-form .field-hint[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-6dceb76a],.profile-page.theme-dark .password-form .email-warning[data-v-6dceb76a],.profile-page.theme-dark .profile-form .email-warning[data-v-6dceb76a]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-alert{background:#1c1c1c;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-6dceb76a],.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-6dceb76a]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-6dceb76a]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-6dceb76a]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-6dceb76a]{color:#8b949e}.profile-page.theme-dark[data-v-6dceb76a] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-tag.ant-tag-has-color{color:#fff!important;border-color:transparent!important}.profile-page.theme-dark[data-v-6dceb76a] .ant-input-prefix .anticon,.profile-page.theme-dark[data-v-6dceb76a] .ant-input-suffix .anticon,.profile-page.theme-dark[data-v-6dceb76a] .credits-hint .anticon,.profile-page.theme-dark[data-v-6dceb76a] .email-hint .anticon,.profile-page.theme-dark[data-v-6dceb76a] .field-hint .anticon,.profile-page.theme-dark[data-v-6dceb76a] .notification-settings-form .anticon{color:#c9d1d9!important}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item{background:#1c1c1c;border-color:#2a2a2a}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1c1c1c;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-options .ant-select-selector{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-btn.ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#c9d1d9}.profile-page.theme-dark[data-v-6dceb76a] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-6dceb76a]{padding:12px}.profile-page .page-header[data-v-6dceb76a]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-6dceb76a]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{font-size:22px}.profile-page .page-header .page-desc[data-v-6dceb76a]{font-size:13px}.profile-page .profile-cards-row[data-v-6dceb76a]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-6dceb76a]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-6dceb76a]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-6dceb76a]{margin-bottom:12px}.profile-page .profile-card[data-v-6dceb76a]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-6dceb76a]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-6dceb76a] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-6dceb76a]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-6dceb76a]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-6dceb76a]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-6dceb76a]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-6dceb76a]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-6dceb76a]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-6dceb76a]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-6dceb76a]{font-size:16px}.profile-page .credits-card .credits-body[data-v-6dceb76a]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-6dceb76a]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-6dceb76a]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-6dceb76a]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-6dceb76a]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-6dceb76a]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-6dceb76a]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-6dceb76a]{font-size:16px}.profile-page .referral-card .referral-body[data-v-6dceb76a]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-6dceb76a]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-6dceb76a],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-6dceb76a]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-6dceb76a] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-6dceb76a]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-6dceb76a]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-6dceb76a] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-6dceb76a],.profile-page .edit-card .profile-form[data-v-6dceb76a]{max-width:100%}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-input-password,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input,.profile-page .edit-card .profile-form[data-v-6dceb76a] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-6dceb76a],.profile-page .edit-card .profile-form .email-hint[data-v-6dceb76a]{font-size:11px}.profile-page .edit-card .password-form[data-v-6dceb76a] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-6dceb76a]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-6dceb76a] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-6dceb76a] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-6dceb76a]{gap:8px}.profile-page .referral-user-cell[data-v-6dceb76a] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-6dceb76a]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-6dceb76a]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-6dceb76a]{padding:8px}.profile-page .page-header[data-v-6dceb76a]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-6dceb76a]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-6dceb76a]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-6dceb76a]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-6dceb76a]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-6dceb76a]{font-size:20px}.profile-page .edit-card[data-v-6dceb76a] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-6dceb76a] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/320.136e873f.css b/frontend/dist/css/320.136e873f.css new file mode 100644 index 0000000..d950081 --- /dev/null +++ b/frontend/dist/css/320.136e873f.css @@ -0,0 +1 @@ +.dashboard-pro[data-v-7ff4e505]{min-height:100vh;padding:20px;background:#f8fafc;-webkit-transition:background .3s;transition:background .3s}.dashboard-pro.theme-dark[data-v-7ff4e505]{background:#141414}.dashboard-pro.theme-dark .kpi-card[data-v-7ff4e505]{background:#1c1c1c;border-color:#2a2a2a}.dashboard-pro.theme-dark .kpi-card .kpi-label[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .kpi-card .kpi-value .amount[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .kpi-card .kpi-sub[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .chart-panel[data-v-7ff4e505],.dashboard-pro.theme-dark .table-panel[data-v-7ff4e505]{background:#1c1c1c;border-color:#2a2a2a}.dashboard-pro.theme-dark .chart-panel .panel-header[data-v-7ff4e505],.dashboard-pro.theme-dark .table-panel .panel-header[data-v-7ff4e505]{border-color:#2a2a2a}.dashboard-pro.theme-dark .chart-panel .panel-header .panel-title[data-v-7ff4e505],.dashboard-pro.theme-dark .table-panel .panel-header .panel-title[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card[data-v-7ff4e505]{background:hsla(0,0%,100%,.03);border-color:#2a2a2a}.dashboard-pro.theme-dark .ranking-card .rank-name[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card .rank-stats label[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .calendar-nav .current-month[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .calendar-nav .ant-btn-link[data-v-7ff4e505],.dashboard-pro.theme-dark .profit-calendar .calendar-empty[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .profit-calendar .month-summary[data-v-7ff4e505]{background:hsla(0,0%,100%,.03)}.dashboard-pro.theme-dark .profit-calendar .calendar-weekdays .weekday[data-v-7ff4e505],.dashboard-pro.theme-dark .profit-calendar .month-summary .summary-label[data-v-7ff4e505]{color:#888}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell[data-v-7ff4e505]{background:hsla(0,0%,100%,.03)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-7ff4e505]{background:hsla(0,0%,100%,.02)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.profit[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(34,197,94,.15),rgba(34,197,94,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.loss[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(239,68,68,.15),rgba(239,68,68,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.zero[data-v-7ff4e505]{background:hsla(0,0%,100%,.03)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-7ff4e505]{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table{background:transparent;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-thead>tr>th{background:#141414;color:#888;border-color:#2a2a2a}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-tbody>tr>td{border-color:#2a2a2a;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-tbody>tr:hover>td{background:#252525}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-placeholder{background:transparent}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-table-placeholder .ant-empty-description{color:#888}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-item{background:#1c1c1c;border-color:#2a2a2a}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-item a{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:#3b82f6;border-color:#3b82f6}.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.dashboard-pro.theme-dark .pro-table[data-v-7ff4e505] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1c1c1c;border-color:#2a2a2a;color:#f1f5f9}.dashboard-pro .kpi-grid[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}.dashboard-pro .kpi-card[data-v-7ff4e505]{position:relative;background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:20px;overflow:hidden;-webkit-transition:all .3s cubic-bezier(.4,0,.2,1);transition:all .3s cubic-bezier(.4,0,.2,1)}.dashboard-pro .kpi-card[data-v-7ff4e505]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 10px 40px rgba(0,0,0,.1);box-shadow:0 10px 40px rgba(0,0,0,.1)}.dashboard-pro .kpi-card.clickable[data-v-7ff4e505]{cursor:pointer}.dashboard-pro .kpi-card.clickable .card-arrow[data-v-7ff4e505]{position:absolute;right:16px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:.4;-webkit-transition:all .3s;transition:all .3s}.dashboard-pro .kpi-card.clickable:hover .card-arrow[data-v-7ff4e505]{opacity:1;right:12px}.dashboard-pro .kpi-card .kpi-glow[data-v-7ff4e505]{position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle,rgba(59,130,246,.15) 0,transparent 70%);pointer-events:none}.dashboard-pro .kpi-card .kpi-content[data-v-7ff4e505]{position:relative;z-index:1}.dashboard-pro .kpi-card .kpi-header[data-v-7ff4e505]{gap:8px;margin-bottom:12px}.dashboard-pro .kpi-card .kpi-header[data-v-7ff4e505],.dashboard-pro .kpi-card .kpi-icon[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .kpi-card .kpi-icon[data-v-7ff4e505]{width:32px;height:32px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;background:rgba(59,130,246,.1);color:#3b82f6;font-size:16px}.dashboard-pro .kpi-card .kpi-label[data-v-7ff4e505]{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .kpi-card .kpi-value[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:2px}.dashboard-pro .kpi-card .kpi-value .currency[data-v-7ff4e505]{font-size:18px;font-weight:500;color:#64748b}.dashboard-pro .kpi-card .kpi-value .amount[data-v-7ff4e505]{font-size:28px;font-weight:700;color:#1e293b;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.dashboard-pro .kpi-card .kpi-value .unit[data-v-7ff4e505]{font-size:14px;font-weight:500;color:#64748b;margin-left:4px}.dashboard-pro .kpi-card .kpi-sub[data-v-7ff4e505]{margin-top:8px;font-size:12px;color:#64748b}.dashboard-pro .kpi-card .kpi-sub .label[data-v-7ff4e505]{margin:0 2px}.dashboard-pro .kpi-card .kpi-sub .divider[data-v-7ff4e505]{margin:0 6px;opacity:.5}.dashboard-pro .kpi-card .kpi-sub .highlight[data-v-7ff4e505]{font-weight:600;color:#3b82f6}.dashboard-pro .kpi-card.kpi-primary[data-v-7ff4e505]{background:linear-gradient(135deg,#1e40af,#3b82f6 50%,#60a5fa);border:none}.dashboard-pro .kpi-card.kpi-primary .kpi-icon[data-v-7ff4e505]{background:hsla(0,0%,100%,.2);color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-label[data-v-7ff4e505]{color:hsla(0,0%,100%,.8)}.dashboard-pro .kpi-card.kpi-primary .kpi-value .amount[data-v-7ff4e505],.dashboard-pro .kpi-card.kpi-primary .kpi-value .currency[data-v-7ff4e505],.dashboard-pro .kpi-card.kpi-primary .kpi-value .unit[data-v-7ff4e505]{color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-sub[data-v-7ff4e505]{color:hsla(0,0%,100%,.7)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-7ff4e505]{position:absolute;right:12px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:60px;height:60px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg[data-v-7ff4e505]{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-bg[data-v-7ff4e505]{fill:none;stroke:rgba(16,185,129,.15);stroke-width:3}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-progress[data-v-7ff4e505]{fill:none;stroke:#10b981;stroke-width:3;stroke-linecap:round;-webkit-transition:stroke-dasharray .5s ease;transition:stroke-dasharray .5s ease}.dashboard-pro .kpi-card.kpi-win-rate .kpi-icon[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .kpi-card.kpi-profit-factor .kpi-icon[data-v-7ff4e505]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .kpi-card.kpi-drawdown .kpi-icon[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .kpi-card.kpi-drawdown .kpi-value .amount[data-v-7ff4e505]{color:#ef4444}.dashboard-pro .kpi-card.kpi-trades .kpi-icon[data-v-7ff4e505]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .kpi-card.kpi-strategies .kpi-icon[data-v-7ff4e505]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .chart-row[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .chart-row[data-v-7ff4e505]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .chart-panel[data-v-7ff4e505]{background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .chart-panel.chart-main[data-v-7ff4e505]{-webkit-box-flex:2;-ms-flex:2;flex:2}.dashboard-pro .chart-panel.chart-side[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:300px}.dashboard-pro .chart-panel.chart-half[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1}.dashboard-pro .chart-panel .panel-header[data-v-7ff4e505]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .chart-panel .panel-header[data-v-7ff4e505],.dashboard-pro .chart-panel .panel-title[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .chart-panel .panel-title[data-v-7ff4e505]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .chart-panel .panel-title .anticon[data-v-7ff4e505]{color:#3b82f6}.dashboard-pro .chart-panel .panel-legend[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;font-size:12px;color:#64748b}.dashboard-pro .chart-panel .panel-legend .legend-item[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot[data-v-7ff4e505]{width:10px;height:10px;border-radius:2px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.bar[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,left bottom,from(#34d399),to(#10b981));background:linear-gradient(180deg,#34d399,#10b981)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.line[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,right top,from(#3b82f6),to(#8b5cf6));background:linear-gradient(90deg,#3b82f6,#8b5cf6)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.loss[data-v-7ff4e505]{background:#ef4444}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.profit[data-v-7ff4e505]{background:#10b981}.dashboard-pro .chart-panel .panel-legend.calendar-legend[data-v-7ff4e505]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.dashboard-pro .chart-panel .panel-legend.calendar-legend .legend-gradient[data-v-7ff4e505]{width:80px;height:10px;border-radius:3px;background:-webkit-gradient(linear,left top,right top,from(#ef4444),color-stop(#fca5a5),color-stop(#f4f4f5),color-stop(#86efac),to(#22c55e));background:linear-gradient(90deg,#ef4444,#fca5a5,#f4f4f5,#86efac,#22c55e)}.dashboard-pro .chart-panel .panel-badge[data-v-7ff4e505]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .chart-panel .chart-body[data-v-7ff4e505]{height:320px;padding:16px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-7ff4e505]{height:220px}.dashboard-pro .chart-panel .chart-body.calendar-chart[data-v-7ff4e505]{height:280px}.dashboard-pro .chart-panel .calendar-nav[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.dashboard-pro .chart-panel .calendar-nav .current-month[data-v-7ff4e505]{font-size:14px;font-weight:600;color:#1e293b;min-width:80px;text-align:center}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-7ff4e505]{padding:0;height:auto;color:#64748b}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-7ff4e505]:hover:not(:disabled){color:#3b82f6}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-7ff4e505]:disabled{opacity:.3}.dashboard-pro .chart-panel .profit-calendar[data-v-7ff4e505]{padding:12px 16px;overflow:hidden}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-7ff4e505],.dashboard-pro .chart-panel .profit-calendar[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-7ff4e505]{height:280px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#64748b}.dashboard-pro .chart-panel .profit-calendar .calendar-empty .anticon[data-v-7ff4e505]{font-size:40px;margin-bottom:10px;opacity:.3}.dashboard-pro .chart-panel .profit-calendar .month-summary[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px;margin-bottom:10px;padding:8px 12px;background:rgba(241,245,249,.5);border-radius:8px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:2px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-label[data-v-7ff4e505]{font-size:10px;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value[data-v-7ff4e505]{font-size:15px;font-weight:700;font-family:JetBrains Mono,monospace}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.positive[data-v-7ff4e505]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.negative[data-v-7ff4e505]{color:#ef4444}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:4px}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays .weekday[data-v-7ff4e505]{text-align:center;font-size:10px;font-weight:600;color:#64748b;padding:4px 0}.dashboard-pro .chart-panel .profit-calendar .calendar-grid[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell[data-v-7ff4e505]{height:36px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:6px;background:rgba(241,245,249,.5);border:1px solid transparent;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.empty[data-v-7ff4e505]{background:transparent;border:none}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-7ff4e505]{background:rgba(241,245,249,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(34,197,94,.12),rgba(34,197,94,.2));border-color:rgba(34,197,94,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-7ff4e505]:hover{background:linear-gradient(135deg,rgba(34,197,94,.2),rgba(34,197,94,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(34,197,94,.2);box-shadow:0 4px 12px rgba(34,197,94,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-7ff4e505]{background:linear-gradient(135deg,rgba(239,68,68,.12),rgba(239,68,68,.2));border-color:rgba(239,68,68,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-7ff4e505]:hover{background:linear-gradient(135deg,rgba(239,68,68,.2),rgba(239,68,68,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(239,68,68,.2);box-shadow:0 4px 12px rgba(239,68,68,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.zero[data-v-7ff4e505]{background:hsla(240,5%,65%,.1);border-color:hsla(240,5%,65%,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-7ff4e505]{font-size:11px;font-weight:600;color:#1e293b;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit[data-v-7ff4e505]{font-size:9px;font-weight:600;font-family:JetBrains Mono,monospace;margin-top:1px;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.positive[data-v-7ff4e505]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.negative[data-v-7ff4e505]{color:#ef4444}.dashboard-pro .strategy-ranking[data-v-7ff4e505]{padding:16px}.dashboard-pro .strategy-ranking .empty-state[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:40px;color:#64748b}.dashboard-pro .strategy-ranking .empty-state .anticon[data-v-7ff4e505]{font-size:40px;margin-bottom:12px;opacity:.3}.dashboard-pro .strategy-ranking .ranking-grid[data-v-7ff4e505]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}.dashboard-pro .strategy-ranking .ranking-card[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:14px 16px;background:rgba(241,245,249,.5);border:1px solid #e2e8f0;border-radius:12px;position:relative;overflow:hidden}.dashboard-pro .strategy-ranking .ranking-card.rank-top[data-v-7ff4e505]{border-color:transparent;background:linear-gradient(135deg,rgba(59,130,246,.08),rgba(139,92,246,.08))}.dashboard-pro .strategy-ranking .ranking-card .rank-badge[data-v-7ff4e505]{width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;font-size:12px;font-weight:700;background:#64748b;color:#fff;-ms-flex-negative:0;flex-shrink:0}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-1[data-v-7ff4e505]{background:linear-gradient(135deg,#fbbf24,#f59e0b)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-2[data-v-7ff4e505]{background:linear-gradient(135deg,#9ca3af,#6b7280)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-3[data-v-7ff4e505]{background:linear-gradient(135deg,#cd7f32,#b87333)}.dashboard-pro .strategy-ranking .ranking-card .rank-info[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-name[data-v-7ff4e505]{font-size:13px;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-ms-flex-wrap:wrap;flex-wrap:wrap}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat[data-v-7ff4e505]{font-size:11px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat label[data-v-7ff4e505]{color:#64748b;margin-right:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar[data-v-7ff4e505]{position:absolute;bottom:0;left:0;right:0;height:3px;background:rgba(0,0,0,.05)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill[data-v-7ff4e505]{height:100%;border-radius:0 3px 3px 0;-webkit-transition:width .5s ease;transition:width .5s ease}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.positive[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,right top,from(#10b981),to(#34d399));background:linear-gradient(90deg,#10b981,#34d399)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.negative[data-v-7ff4e505]{background:-webkit-gradient(linear,left top,right top,from(#ef4444),to(#f87171));background:linear-gradient(90deg,#ef4444,#f87171)}.dashboard-pro .table-row[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-top:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .table-row[data-v-7ff4e505]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .table-panel[data-v-7ff4e505]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .table-panel .panel-header[data-v-7ff4e505]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .table-panel .panel-header[data-v-7ff4e505],.dashboard-pro .table-panel .panel-title[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .table-panel .panel-title[data-v-7ff4e505]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .table-panel .panel-title .anticon[data-v-7ff4e505]{color:#3b82f6}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-7ff4e505]{margin-left:8px;font-size:16px;cursor:pointer;color:#10b981;-webkit-transition:all .2s;transition:all .2s}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-7ff4e505]:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.dashboard-pro .table-panel .panel-title .sound-toggle.sound-off[data-v-7ff4e505]{color:#64748b}.dashboard-pro .table-panel .panel-badge[data-v-7ff4e505]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .orders-panel[data-v-7ff4e505]{margin-bottom:20px}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table{font-size:13px}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table-thead>tr>th{background:rgba(241,245,249,.8);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:#64748b;border-bottom:1px solid #e2e8f0;padding:12px 16px}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table-tbody>tr>td{padding:12px 16px;border-bottom:1px solid #e2e8f0}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-table-tbody>tr:hover>td{background:rgba(59,130,246,.04)}.dashboard-pro .pro-table[data-v-7ff4e505] .ant-pagination{padding:12px 16px;margin:0}.dashboard-pro .symbol-cell .symbol-name[data-v-7ff4e505]{font-weight:600;display:block}.dashboard-pro .symbol-cell .symbol-strategy[data-v-7ff4e505]{font-size:11px;color:#64748b}.dashboard-pro .side-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .side-tag.long[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .side-tag.short[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .type-tag.long[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .type-tag.short[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag.close-long[data-v-7ff4e505]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .type-tag.close-short[data-v-7ff4e505]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .symbol-tag[data-v-7ff4e505]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .exchange-tag[data-v-7ff4e505],.dashboard-pro .symbol-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .exchange-tag.binance[data-v-7ff4e505]{background:rgba(240,185,11,.1);color:#f0b90b}.dashboard-pro .exchange-tag.okx[data-v-7ff4e505]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .exchange-tag.bitget[data-v-7ff4e505]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .exchange-tag.signal[data-v-7ff4e505]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .market-type[data-v-7ff4e505]{font-size:10px;color:#64748b;margin-top:2px}.dashboard-pro .status-tag[data-v-7ff4e505]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .status-tag.pending[data-v-7ff4e505]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .status-tag.processing[data-v-7ff4e505]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .status-tag.completed[data-v-7ff4e505]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .status-tag.failed[data-v-7ff4e505]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .status-tag.cancelled[data-v-7ff4e505]{background:rgba(100,116,139,.1);color:#64748b}.dashboard-pro .error-hint[data-v-7ff4e505]{font-size:11px;color:#ef4444;margin-top:4px;cursor:pointer}.dashboard-pro .error-hint .anticon[data-v-7ff4e505]{margin-right:4px}.dashboard-pro .notify-icons[data-v-7ff4e505]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.dashboard-pro .notify-icons .notify-icon[data-v-7ff4e505]{color:#64748b;font-size:14px}.dashboard-pro .pnl-cell[data-v-7ff4e505]{text-align:right}.dashboard-pro .pnl-cell .pnl-percent[data-v-7ff4e505]{display:block;font-size:11px}.dashboard-pro .time-cell[data-v-7ff4e505]{font-size:12px;color:#64748b}.dashboard-pro .sub-text[data-v-7ff4e505]{font-size:11px;color:#64748b}.dashboard-pro .text-muted[data-v-7ff4e505]{color:#64748b}.dashboard-pro .positive[data-v-7ff4e505]{color:#10b981}.dashboard-pro .negative[data-v-7ff4e505]{color:#ef4444}@media (max-width:768px){.dashboard-pro[data-v-7ff4e505]{padding:12px}.dashboard-pro .kpi-grid[data-v-7ff4e505]{grid-template-columns:repeat(2,1fr);gap:10px}.dashboard-pro .kpi-card[data-v-7ff4e505]{padding:14px}.dashboard-pro .kpi-card .kpi-value .amount[data-v-7ff4e505]{font-size:22px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-7ff4e505]{width:48px;height:48px;right:8px}.dashboard-pro .chart-panel .chart-body[data-v-7ff4e505]{height:260px;padding:12px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-7ff4e505]{height:180px}.dashboard-pro .ranking-grid[data-v-7ff4e505]{grid-template-columns:1fr}} \ No newline at end of file diff --git a/frontend/dist/css/355.02ed56c8.css b/frontend/dist/css/355.02ed56c8.css deleted file mode 100644 index 0244b44..0000000 --- a/frontend/dist/css/355.02ed56c8.css +++ /dev/null @@ -1 +0,0 @@ -.dashboard-pro[data-v-16dc1b35]{min-height:100vh;padding:20px;background:#f8fafc;-webkit-transition:background .3s;transition:background .3s}.dashboard-pro.theme-dark[data-v-16dc1b35]{background:#0f172a}.dashboard-pro.theme-dark .kpi-card[data-v-16dc1b35]{background:#1e293b;border-color:#334155}.dashboard-pro.theme-dark .kpi-card .kpi-label[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .kpi-card .kpi-value .amount[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .kpi-card .kpi-sub[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .chart-panel[data-v-16dc1b35],.dashboard-pro.theme-dark .table-panel[data-v-16dc1b35]{background:#1e293b;border-color:#334155}.dashboard-pro.theme-dark .chart-panel .panel-header[data-v-16dc1b35],.dashboard-pro.theme-dark .table-panel .panel-header[data-v-16dc1b35]{border-color:#334155}.dashboard-pro.theme-dark .chart-panel .panel-header .panel-title[data-v-16dc1b35],.dashboard-pro.theme-dark .table-panel .panel-header .panel-title[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card[data-v-16dc1b35]{background:rgba(51,65,85,.5);border-color:#334155}.dashboard-pro.theme-dark .ranking-card .rank-name[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card .rank-stats label[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .calendar-nav .current-month[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .calendar-nav .ant-btn-link[data-v-16dc1b35],.dashboard-pro.theme-dark .profit-calendar .calendar-empty[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .profit-calendar .month-summary[data-v-16dc1b35]{background:rgba(51,65,85,.5)}.dashboard-pro.theme-dark .profit-calendar .calendar-weekdays .weekday[data-v-16dc1b35],.dashboard-pro.theme-dark .profit-calendar .month-summary .summary-label[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell[data-v-16dc1b35]{background:rgba(51,65,85,.3)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-16dc1b35]{background:rgba(51,65,85,.2)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.profit[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(34,197,94,.15),rgba(34,197,94,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.loss[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(239,68,68,.15),rgba(239,68,68,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.zero[data-v-16dc1b35]{background:rgba(100,116,139,.2)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table{background:transparent;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-thead>tr>th{background:rgba(51,65,85,.5);color:#94a3b8;border-color:#334155}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-tbody>tr>td{border-color:#334155;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-tbody>tr:hover>td{background:rgba(51,65,85,.3)}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-placeholder{background:transparent}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-placeholder .ant-empty-description{color:#94a3b8}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-item{background:#1e293b;border-color:#334155}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-item a{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:#3b82f6;border-color:#3b82f6}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e293b;border-color:#334155;color:#f1f5f9}.dashboard-pro .kpi-grid[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}.dashboard-pro .kpi-card[data-v-16dc1b35]{position:relative;background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:20px;overflow:hidden;-webkit-transition:all .3s cubic-bezier(.4,0,.2,1);transition:all .3s cubic-bezier(.4,0,.2,1)}.dashboard-pro .kpi-card[data-v-16dc1b35]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 10px 40px rgba(0,0,0,.1);box-shadow:0 10px 40px rgba(0,0,0,.1)}.dashboard-pro .kpi-card.clickable[data-v-16dc1b35]{cursor:pointer}.dashboard-pro .kpi-card.clickable .card-arrow[data-v-16dc1b35]{position:absolute;right:16px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:.4;-webkit-transition:all .3s;transition:all .3s}.dashboard-pro .kpi-card.clickable:hover .card-arrow[data-v-16dc1b35]{opacity:1;right:12px}.dashboard-pro .kpi-card .kpi-glow[data-v-16dc1b35]{position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle,rgba(59,130,246,.15) 0,transparent 70%);pointer-events:none}.dashboard-pro .kpi-card .kpi-content[data-v-16dc1b35]{position:relative;z-index:1}.dashboard-pro .kpi-card .kpi-header[data-v-16dc1b35]{gap:8px;margin-bottom:12px}.dashboard-pro .kpi-card .kpi-header[data-v-16dc1b35],.dashboard-pro .kpi-card .kpi-icon[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .kpi-card .kpi-icon[data-v-16dc1b35]{width:32px;height:32px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;background:rgba(59,130,246,.1);color:#3b82f6;font-size:16px}.dashboard-pro .kpi-card .kpi-label[data-v-16dc1b35]{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .kpi-card .kpi-value[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:2px}.dashboard-pro .kpi-card .kpi-value .currency[data-v-16dc1b35]{font-size:18px;font-weight:500;color:#64748b}.dashboard-pro .kpi-card .kpi-value .amount[data-v-16dc1b35]{font-size:28px;font-weight:700;color:#1e293b;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.dashboard-pro .kpi-card .kpi-value .unit[data-v-16dc1b35]{font-size:14px;font-weight:500;color:#64748b;margin-left:4px}.dashboard-pro .kpi-card .kpi-sub[data-v-16dc1b35]{margin-top:8px;font-size:12px;color:#64748b}.dashboard-pro .kpi-card .kpi-sub .label[data-v-16dc1b35]{margin:0 2px}.dashboard-pro .kpi-card .kpi-sub .divider[data-v-16dc1b35]{margin:0 6px;opacity:.5}.dashboard-pro .kpi-card .kpi-sub .highlight[data-v-16dc1b35]{font-weight:600;color:#3b82f6}.dashboard-pro .kpi-card.kpi-primary[data-v-16dc1b35]{background:linear-gradient(135deg,#1e40af,#3b82f6 50%,#60a5fa);border:none}.dashboard-pro .kpi-card.kpi-primary .kpi-icon[data-v-16dc1b35]{background:hsla(0,0%,100%,.2);color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-label[data-v-16dc1b35]{color:hsla(0,0%,100%,.8)}.dashboard-pro .kpi-card.kpi-primary .kpi-value .amount[data-v-16dc1b35],.dashboard-pro .kpi-card.kpi-primary .kpi-value .currency[data-v-16dc1b35],.dashboard-pro .kpi-card.kpi-primary .kpi-value .unit[data-v-16dc1b35]{color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-sub[data-v-16dc1b35]{color:hsla(0,0%,100%,.7)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-16dc1b35]{position:absolute;right:12px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:60px;height:60px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg[data-v-16dc1b35]{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-bg[data-v-16dc1b35]{fill:none;stroke:rgba(16,185,129,.15);stroke-width:3}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-progress[data-v-16dc1b35]{fill:none;stroke:#10b981;stroke-width:3;stroke-linecap:round;-webkit-transition:stroke-dasharray .5s ease;transition:stroke-dasharray .5s ease}.dashboard-pro .kpi-card.kpi-win-rate .kpi-icon[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .kpi-card.kpi-profit-factor .kpi-icon[data-v-16dc1b35]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .kpi-card.kpi-drawdown .kpi-icon[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .kpi-card.kpi-drawdown .kpi-value .amount[data-v-16dc1b35]{color:#ef4444}.dashboard-pro .kpi-card.kpi-trades .kpi-icon[data-v-16dc1b35]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .kpi-card.kpi-strategies .kpi-icon[data-v-16dc1b35]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .chart-row[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .chart-row[data-v-16dc1b35]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .chart-panel[data-v-16dc1b35]{background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .chart-panel.chart-main[data-v-16dc1b35]{-webkit-box-flex:2;-ms-flex:2;flex:2}.dashboard-pro .chart-panel.chart-side[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:300px}.dashboard-pro .chart-panel.chart-half[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1}.dashboard-pro .chart-panel .panel-header[data-v-16dc1b35]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .chart-panel .panel-header[data-v-16dc1b35],.dashboard-pro .chart-panel .panel-title[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .chart-panel .panel-title[data-v-16dc1b35]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .chart-panel .panel-title .anticon[data-v-16dc1b35]{color:#3b82f6}.dashboard-pro .chart-panel .panel-legend[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;font-size:12px;color:#64748b}.dashboard-pro .chart-panel .panel-legend .legend-item[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot[data-v-16dc1b35]{width:10px;height:10px;border-radius:2px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.bar[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,left bottom,from(#34d399),to(#10b981));background:linear-gradient(180deg,#34d399,#10b981)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.line[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,right top,from(#3b82f6),to(#8b5cf6));background:linear-gradient(90deg,#3b82f6,#8b5cf6)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.loss[data-v-16dc1b35]{background:#ef4444}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.profit[data-v-16dc1b35]{background:#10b981}.dashboard-pro .chart-panel .panel-legend.calendar-legend[data-v-16dc1b35]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.dashboard-pro .chart-panel .panel-legend.calendar-legend .legend-gradient[data-v-16dc1b35]{width:80px;height:10px;border-radius:3px;background:-webkit-gradient(linear,left top,right top,from(#ef4444),color-stop(#fca5a5),color-stop(#f4f4f5),color-stop(#86efac),to(#22c55e));background:linear-gradient(90deg,#ef4444,#fca5a5,#f4f4f5,#86efac,#22c55e)}.dashboard-pro .chart-panel .panel-badge[data-v-16dc1b35]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .chart-panel .chart-body[data-v-16dc1b35]{height:320px;padding:16px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-16dc1b35]{height:220px}.dashboard-pro .chart-panel .chart-body.calendar-chart[data-v-16dc1b35]{height:280px}.dashboard-pro .chart-panel .calendar-nav[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.dashboard-pro .chart-panel .calendar-nav .current-month[data-v-16dc1b35]{font-size:14px;font-weight:600;color:#1e293b;min-width:80px;text-align:center}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-16dc1b35]{padding:0;height:auto;color:#64748b}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-16dc1b35]:hover:not(:disabled){color:#3b82f6}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-16dc1b35]:disabled{opacity:.3}.dashboard-pro .chart-panel .profit-calendar[data-v-16dc1b35]{padding:12px 16px;overflow:hidden}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-16dc1b35],.dashboard-pro .chart-panel .profit-calendar[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-16dc1b35]{height:280px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#64748b}.dashboard-pro .chart-panel .profit-calendar .calendar-empty .anticon[data-v-16dc1b35]{font-size:40px;margin-bottom:10px;opacity:.3}.dashboard-pro .chart-panel .profit-calendar .month-summary[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px;margin-bottom:10px;padding:8px 12px;background:rgba(241,245,249,.5);border-radius:8px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:2px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-label[data-v-16dc1b35]{font-size:10px;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value[data-v-16dc1b35]{font-size:15px;font-weight:700;font-family:JetBrains Mono,monospace}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.positive[data-v-16dc1b35]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.negative[data-v-16dc1b35]{color:#ef4444}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:4px}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays .weekday[data-v-16dc1b35]{text-align:center;font-size:10px;font-weight:600;color:#64748b;padding:4px 0}.dashboard-pro .chart-panel .profit-calendar .calendar-grid[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell[data-v-16dc1b35]{height:36px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:6px;background:rgba(241,245,249,.5);border:1px solid transparent;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.empty[data-v-16dc1b35]{background:transparent;border:none}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-16dc1b35]{background:rgba(241,245,249,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(34,197,94,.12),rgba(34,197,94,.2));border-color:rgba(34,197,94,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-16dc1b35]:hover{background:linear-gradient(135deg,rgba(34,197,94,.2),rgba(34,197,94,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(34,197,94,.2);box-shadow:0 4px 12px rgba(34,197,94,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(239,68,68,.12),rgba(239,68,68,.2));border-color:rgba(239,68,68,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-16dc1b35]:hover{background:linear-gradient(135deg,rgba(239,68,68,.2),rgba(239,68,68,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(239,68,68,.2);box-shadow:0 4px 12px rgba(239,68,68,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.zero[data-v-16dc1b35]{background:hsla(240,5%,65%,.1);border-color:hsla(240,5%,65%,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-16dc1b35]{font-size:11px;font-weight:600;color:#1e293b;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit[data-v-16dc1b35]{font-size:9px;font-weight:600;font-family:JetBrains Mono,monospace;margin-top:1px;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.positive[data-v-16dc1b35]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.negative[data-v-16dc1b35]{color:#ef4444}.dashboard-pro .strategy-ranking[data-v-16dc1b35]{padding:16px}.dashboard-pro .strategy-ranking .empty-state[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:40px;color:#64748b}.dashboard-pro .strategy-ranking .empty-state .anticon[data-v-16dc1b35]{font-size:40px;margin-bottom:12px;opacity:.3}.dashboard-pro .strategy-ranking .ranking-grid[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}.dashboard-pro .strategy-ranking .ranking-card[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:14px 16px;background:rgba(241,245,249,.5);border:1px solid #e2e8f0;border-radius:12px;position:relative;overflow:hidden}.dashboard-pro .strategy-ranking .ranking-card.rank-top[data-v-16dc1b35]{border-color:transparent;background:linear-gradient(135deg,rgba(59,130,246,.08),rgba(139,92,246,.08))}.dashboard-pro .strategy-ranking .ranking-card .rank-badge[data-v-16dc1b35]{width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;font-size:12px;font-weight:700;background:#64748b;color:#fff;-ms-flex-negative:0;flex-shrink:0}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-1[data-v-16dc1b35]{background:linear-gradient(135deg,#fbbf24,#f59e0b)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-2[data-v-16dc1b35]{background:linear-gradient(135deg,#9ca3af,#6b7280)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-3[data-v-16dc1b35]{background:linear-gradient(135deg,#cd7f32,#b87333)}.dashboard-pro .strategy-ranking .ranking-card .rank-info[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-name[data-v-16dc1b35]{font-size:13px;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-ms-flex-wrap:wrap;flex-wrap:wrap}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat[data-v-16dc1b35]{font-size:11px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat label[data-v-16dc1b35]{color:#64748b;margin-right:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar[data-v-16dc1b35]{position:absolute;bottom:0;left:0;right:0;height:3px;background:rgba(0,0,0,.05)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill[data-v-16dc1b35]{height:100%;border-radius:0 3px 3px 0;-webkit-transition:width .5s ease;transition:width .5s ease}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.positive[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,right top,from(#10b981),to(#34d399));background:linear-gradient(90deg,#10b981,#34d399)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.negative[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,right top,from(#ef4444),to(#f87171));background:linear-gradient(90deg,#ef4444,#f87171)}.dashboard-pro .table-row[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .table-row[data-v-16dc1b35]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .table-panel[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .table-panel .panel-header[data-v-16dc1b35]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .table-panel .panel-header[data-v-16dc1b35],.dashboard-pro .table-panel .panel-title[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .table-panel .panel-title[data-v-16dc1b35]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .table-panel .panel-title .anticon[data-v-16dc1b35]{color:#3b82f6}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-16dc1b35]{margin-left:8px;font-size:16px;cursor:pointer;color:#10b981;-webkit-transition:all .2s;transition:all .2s}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-16dc1b35]:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.dashboard-pro .table-panel .panel-title .sound-toggle.sound-off[data-v-16dc1b35]{color:#64748b}.dashboard-pro .table-panel .panel-badge[data-v-16dc1b35]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .orders-panel[data-v-16dc1b35]{margin-bottom:20px}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table{font-size:13px}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table-thead>tr>th{background:rgba(241,245,249,.8);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:#64748b;border-bottom:1px solid #e2e8f0;padding:12px 16px}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table-tbody>tr>td{padding:12px 16px;border-bottom:1px solid #e2e8f0}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table-tbody>tr:hover>td{background:rgba(59,130,246,.04)}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-pagination{padding:12px 16px;margin:0}.dashboard-pro .symbol-cell .symbol-name[data-v-16dc1b35]{font-weight:600;display:block}.dashboard-pro .symbol-cell .symbol-strategy[data-v-16dc1b35]{font-size:11px;color:#64748b}.dashboard-pro .side-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .side-tag.long[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .side-tag.short[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .type-tag.long[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .type-tag.short[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag.close-long[data-v-16dc1b35]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .type-tag.close-short[data-v-16dc1b35]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .symbol-tag[data-v-16dc1b35]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .exchange-tag[data-v-16dc1b35],.dashboard-pro .symbol-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .exchange-tag.binance[data-v-16dc1b35]{background:rgba(240,185,11,.1);color:#f0b90b}.dashboard-pro .exchange-tag.okx[data-v-16dc1b35]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .exchange-tag.bitget[data-v-16dc1b35]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .exchange-tag.signal[data-v-16dc1b35]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .market-type[data-v-16dc1b35]{font-size:10px;color:#64748b;margin-top:2px}.dashboard-pro .status-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .status-tag.pending[data-v-16dc1b35]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .status-tag.processing[data-v-16dc1b35]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .status-tag.completed[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .status-tag.failed[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .status-tag.cancelled[data-v-16dc1b35]{background:rgba(100,116,139,.1);color:#64748b}.dashboard-pro .error-hint[data-v-16dc1b35]{font-size:11px;color:#ef4444;margin-top:4px;cursor:pointer}.dashboard-pro .error-hint .anticon[data-v-16dc1b35]{margin-right:4px}.dashboard-pro .notify-icons[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.dashboard-pro .notify-icons .notify-icon[data-v-16dc1b35]{color:#64748b;font-size:14px}.dashboard-pro .pnl-cell[data-v-16dc1b35]{text-align:right}.dashboard-pro .pnl-cell .pnl-percent[data-v-16dc1b35]{display:block;font-size:11px}.dashboard-pro .time-cell[data-v-16dc1b35]{font-size:12px;color:#64748b}.dashboard-pro .sub-text[data-v-16dc1b35]{font-size:11px;color:#64748b}.dashboard-pro .text-muted[data-v-16dc1b35]{color:#64748b}.dashboard-pro .positive[data-v-16dc1b35]{color:#10b981}.dashboard-pro .negative[data-v-16dc1b35]{color:#ef4444}@media (max-width:768px){.dashboard-pro[data-v-16dc1b35]{padding:12px}.dashboard-pro .kpi-grid[data-v-16dc1b35]{grid-template-columns:repeat(2,1fr);gap:10px}.dashboard-pro .kpi-card[data-v-16dc1b35]{padding:14px}.dashboard-pro .kpi-card .kpi-value .amount[data-v-16dc1b35]{font-size:22px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-16dc1b35]{width:48px;height:48px;right:8px}.dashboard-pro .chart-panel .chart-body[data-v-16dc1b35]{height:260px;padding:12px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-16dc1b35]{height:180px}.dashboard-pro .ranking-grid[data-v-16dc1b35]{grid-template-columns:1fr}} \ No newline at end of file diff --git a/frontend/dist/css/367.729cfe93.css b/frontend/dist/css/367.729cfe93.css deleted file mode 100644 index 982c1cf..0000000 --- a/frontend/dist/css/367.729cfe93.css +++ /dev/null @@ -1 +0,0 @@ -.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.polymarket-analysis-modal .input-section .input-actions[data-v-41dfa054]{margin-top:12px}.polymarket-analysis-modal .result-section .market-info[data-v-41dfa054]{margin-bottom:24px}.polymarket-analysis-modal .result-section .market-info h3[data-v-41dfa054]{margin-bottom:12px;font-size:18px;font-weight:600}.polymarket-analysis-modal .result-section .market-info .market-meta[data-v-41dfa054]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;-ms-flex-wrap:wrap;flex-wrap:wrap}.polymarket-analysis-modal .result-section .market-info .market-meta .meta-item[data-v-41dfa054]{color:rgba(0,0,0,.65);font-size:14px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison[data-v-41dfa054]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item[data-v-41dfa054]{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-label[data-v-41dfa054]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value[data-v-41dfa054]{font-size:24px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.ai-prob[data-v-41dfa054]{color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-positive[data-v-41dfa054]{color:#52c41a}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-negative[data-v-41dfa054]{color:#ff4d4f}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-neutral[data-v-41dfa054]{color:rgba(0,0,0,.65)}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section[data-v-41dfa054]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card[data-v-41dfa054]{text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-label[data-v-41dfa054]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-value[data-v-41dfa054]{font-size:24px;font-weight:600;color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section[data-v-41dfa054],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section[data-v-41dfa054]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section h4[data-v-41dfa054],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section h4[data-v-41dfa054]{margin-bottom:12px;font-size:16px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section .reasoning-text[data-v-41dfa054],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section .reasoning-text[data-v-41dfa054]{line-height:1.8;color:rgba(0,0,0,.85);white-space:pre-wrap}.polymarket-analysis-modal .result-section .result-actions[data-v-41dfa054]{margin-top:24px;text-align:right}.polymarket-analysis-modal .loading-section[data-v-41dfa054]{text-align:center;padding:40px 0}.theme-dark .polymarket-analysis-modal .market-info h3[data-v-41dfa054]{color:hsla(0,0%,100%,.85)}.theme-dark .polymarket-analysis-modal .market-info .market-meta .meta-item[data-v-41dfa054]{color:hsla(0,0%,100%,.65)}.theme-dark .polymarket-analysis-modal .analysis-result .probability-comparison .prob-item[data-v-41dfa054]{background:hsla(0,0%,100%,.05)}.theme-dark .polymarket-analysis-modal .analysis-result .probability-comparison .prob-item .prob-label[data-v-41dfa054]{color:hsla(0,0%,100%,.65)}.theme-dark .polymarket-analysis-modal .analysis-result .recommendation-section .rec-card[data-v-41dfa054]{background:hsla(0,0%,100%,.05)}.theme-dark .polymarket-analysis-modal .analysis-result .recommendation-section .rec-card .rec-label[data-v-41dfa054]{color:hsla(0,0%,100%,.65)}.theme-dark .polymarket-analysis-modal .analysis-result .key-factors-section .reasoning-text[data-v-41dfa054],.theme-dark .polymarket-analysis-modal .analysis-result .key-factors-section h4[data-v-41dfa054],.theme-dark .polymarket-analysis-modal .analysis-result .reasoning-section .reasoning-text[data-v-41dfa054],.theme-dark .polymarket-analysis-modal .analysis-result .reasoning-section h4[data-v-41dfa054]{color:hsla(0,0%,100%,.85)}.ai-asset-analysis-page[data-v-20b827f5]{padding:16px;min-height:calc(100vh - 120px);background:#f0f2f5}.ai-asset-analysis-page .opp-section[data-v-20b827f5]{margin-bottom:12px}.ai-asset-analysis-page .opp-section .opp-header[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:8px;padding:0 4px}.ai-asset-analysis-page .opp-section .opp-header .opp-title[data-v-20b827f5]{font-size:14px;font-weight:600;color:#1a1a2e}.ai-asset-analysis-page .opp-section .opp-header .opp-header-right[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.ai-asset-analysis-page .opp-section .opp-header .opp-update-hint[data-v-20b827f5]{font-size:12px;color:#8c8c8c}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]{overflow:hidden;position:relative;border-radius:10px}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:after,.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:before{content:"";position:absolute;top:0;bottom:0;width:40px;z-index:2;pointer-events:none}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:before{left:0;background:-webkit-gradient(linear,left top,right top,from(#f0f2f5),to(transparent));background:linear-gradient(90deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:after{right:0;background:-webkit-gradient(linear,right top,left top,from(#f0f2f5),to(transparent));background:linear-gradient(270deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-track[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-animation:opp-scroll-left-20b827f5 60s linear infinite;animation:opp-scroll-left-20b827f5 60s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content;padding:4px 0}.ai-asset-analysis-page .opp-section .opp-track.paused[data-v-20b827f5]{-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes opp-scroll-left-20b827f5{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes opp-scroll-left-20b827f5{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.ai-asset-analysis-page .opp-section .opp-card[data-v-20b827f5]{width:190px;background:#fff;border-radius:10px;padding:12px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06);cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-left:3px solid #d9d9d9;-ms-flex-negative:0;flex-shrink:0}.ai-asset-analysis-page .opp-section .opp-card.is-prediction-market[data-v-20b827f5]{width:280px;min-height:160px}.ai-asset-analysis-page .opp-section .opp-card.bullish[data-v-20b827f5]{border-left-color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card.bearish[data-v-20b827f5]{border-left-color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card.market-predictionmarket[data-v-20b827f5]{border-left-color:#13c2c2;background:linear-gradient(135deg,#fff,#f0f9ff)}.ai-asset-analysis-page .opp-section .opp-card[data-v-20b827f5]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(0,0,0,.1);box-shadow:0 4px 12px rgba(0,0,0,.1)}.ai-asset-analysis-page .opp-section .opp-card .opp-top[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:6px;gap:8px}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol[data-v-20b827f5]{font-weight:700;font-size:14px;color:#1a1a2e;-webkit-box-flex:1;-ms-flex:1;flex:1;word-break:break-word;line-height:1.4}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol.prediction-title[data-v-20b827f5]{font-size:13px;font-weight:600;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.ai-asset-analysis-page .opp-section .opp-card .opp-market-tag[data-v-20b827f5]{font-size:11px;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.ai-asset-analysis-page .opp-section .opp-card .opp-price[data-v-20b827f5]{font-size:13px;color:#595959}.ai-asset-analysis-page .opp-section .opp-card .opp-change[data-v-20b827f5]{font-size:15px;font-weight:600}.ai-asset-analysis-page .opp-section .opp-card .opp-change.up[data-v-20b827f5]{color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card .opp-change.down[data-v-20b827f5]{color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card .opp-signal[data-v-20b827f5]{margin-top:4px}.ai-asset-analysis-page .opp-section .opp-card .opp-reason[data-v-20b827f5]{font-size:11px;color:#8c8c8c;margin-top:4px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ai-asset-analysis-page .opp-section .opp-card .opp-actions[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:6px;gap:6px}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-20b827f5]{font-size:12px;color:#1890ff;font-weight:500;cursor:pointer}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-20b827f5]:hover{text-decoration:underline}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]{font-size:11px;color:#fff;background:linear-gradient(135deg,#1890ff,#722ed1);padding:2px 8px;border-radius:10px;font-weight:600;cursor:pointer;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]:hover{-webkit-transform:scale(1.05);transform:scale(1.05);-webkit-box-shadow:0 2px 8px rgba(114,46,209,.3);box-shadow:0 2px 8px rgba(114,46,209,.3)}.ai-asset-analysis-page .qt-floating-btn[data-v-20b827f5]{position:fixed;right:24px;bottom:80px;width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:24px;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:1000;-webkit-transition:all .3s;transition:all .3s;-webkit-animation:qt-float-pulse-20b827f5 2s ease-in-out infinite;animation:qt-float-pulse-20b827f5 2s ease-in-out infinite}.ai-asset-analysis-page .qt-floating-btn[data-v-20b827f5]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(114,46,209,.5);box-shadow:0 6px 24px rgba(114,46,209,.5)}@-webkit-keyframes qt-float-pulse-20b827f5{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}@keyframes qt-float-pulse-20b827f5{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}.ai-asset-analysis-page .workspace-card[data-v-20b827f5]{border-radius:12px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.06);box-shadow:0 1px 4px rgba(0,0,0,.06)}.ai-asset-analysis-page .workspace-card[data-v-20b827f5] .ant-card-body{padding:0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-bar{margin-bottom:0;padding:0 16px;border-bottom:1px solid #f0f0f0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab{font-size:15px;padding:14px 16px}.ai-asset-analysis-page .workspace-card .tab-body[data-v-20b827f5] .ai-analysis-container.embedded,.ai-asset-analysis-page .workspace-card .tab-body[data-v-20b827f5] .portfolio-container.embedded{border-radius:0;overflow:hidden}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content[data-v-20b827f5]{padding:40px 20px;text-align:center}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder .placeholder-icon[data-v-20b827f5]{font-size:64px;color:#1890ff;margin-bottom:24px}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder h3[data-v-20b827f5]{font-size:20px;font-weight:600;margin-bottom:12px;color:rgba(0,0,0,.85)}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder p[data-v-20b827f5]{font-size:14px;color:rgba(0,0,0,.65);margin-bottom:24px}.ai-asset-analysis-page.theme-dark[data-v-20b827f5]{background:#0d1117}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-title[data-v-20b827f5]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-update-hint[data-v-20b827f5]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-20b827f5]:before{background:-webkit-gradient(linear,left top,right top,from(#0d1117),to(transparent));background:linear-gradient(90deg,#0d1117,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-20b827f5]:after{background:-webkit-gradient(linear,right top,left top,from(#0d1117),to(transparent));background:linear-gradient(270deg,#0d1117,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-20b827f5]{background:#161b22;border-color:#30363d;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card.market-predictionmarket[data-v-20b827f5]{background:linear-gradient(135deg,#161b22,#0d1419);border-left-color:#13c2c2}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-symbol[data-v-20b827f5]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-price[data-v-20b827f5],.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-reason[data-v-20b827f5]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-action[data-v-20b827f5]{color:#58a6ff}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]{background:linear-gradient(135deg,#58a6ff,#8957e5)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-20b827f5]:hover{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.4);box-shadow:0 4px 12px rgba(0,0,0,.4)}.ai-asset-analysis-page.theme-dark .workspace-card[data-v-20b827f5]{background:#161b22;border-color:#30363d}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-bar{border-bottom-color:#30363d}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab{color:#8b949e}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab:hover{color:#c9d1d9}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab-active{color:#58a6ff}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-ink-bar{background-color:#58a6ff} \ No newline at end of file diff --git a/frontend/dist/css/38.973fab6f.css b/frontend/dist/css/38.973fab6f.css new file mode 100644 index 0000000..ea7a701 --- /dev/null +++ b/frontend/dist/css/38.973fab6f.css @@ -0,0 +1 @@ +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-comment.cm-attribute{color:#97b757}.cm-s-monokai span.cm-comment.cm-def{color:#bc9262}.cm-s-monokai span.cm-comment.cm-tag{color:#bc6283}.cm-s-monokai span.cm-comment.cm-type{color:#5998a6}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-eclipse span.cm-meta{color:#ff1717}.cm-s-eclipse span.cm-keyword{line-height:1em;font-weight:700;color:#7f0055}.cm-s-eclipse span.cm-atom{color:#219}.cm-s-eclipse span.cm-number{color:#164}.cm-s-eclipse span.cm-def{color:#00f}.cm-s-eclipse span.cm-variable{color:#000}.cm-s-eclipse span.cm-type,.cm-s-eclipse span.cm-variable-2,.cm-s-eclipse span.cm-variable-3{color:#0000c0}.cm-s-eclipse span.cm-operator,.cm-s-eclipse span.cm-property{color:#000}.cm-s-eclipse span.cm-comment{color:#3f7f5f}.cm-s-eclipse span.cm-string{color:#2a00ff}.cm-s-eclipse span.cm-string-2{color:#f50}.cm-s-eclipse span.cm-qualifier{color:#555}.cm-s-eclipse span.cm-builtin{color:#30a}.cm-s-eclipse span.cm-bracket{color:#cc7}.cm-s-eclipse span.cm-tag{color:#170}.cm-s-eclipse span.cm-attribute{color:#00c}.cm-s-eclipse span.cm-link{color:#219}.cm-s-eclipse span.cm-error{color:red}.cm-s-eclipse .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-eclipse .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}[data-v-4fea1865] .ant-modal{top:20px!important}.visual-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;background:#fafafa;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:500px;overflow:hidden}.visual-modules-list[data-v-4fea1865]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px}.empty-visual-state[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;color:#999}.visual-module-card[data-v-4fea1865]{background:#fff;border:1px solid #e8e8e8;border-radius:4px;margin-bottom:12px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.visual-module-card .module-header[data-v-4fea1865]{padding:8px 12px;border-bottom:1px solid #f0f0f0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;background:#f9f9f9}.visual-module-card .module-header .module-title[data-v-4fea1865],.visual-module-card .module-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.visual-module-card .module-header .module-title[data-v-4fea1865]{font-weight:500;gap:8px}.visual-module-card .module-header .remove-icon[data-v-4fea1865]{cursor:pointer;color:#999}.visual-module-card .module-header .remove-icon[data-v-4fea1865]:hover{color:#ff4d4f}.visual-module-card .module-body[data-v-4fea1865]{padding:12px}.visual-module-card .style-config[data-v-4fea1865]{margin-top:12px;padding-top:12px;border-top:1px dashed #f0f0f0}.visual-module-card .style-config .label[data-v-4fea1865]{margin-right:8px;color:#666}.add-module-bar[data-v-4fea1865]{padding:12px;background:#fff;border-top:1px solid #e8e8e8}@media (max-width:768px){.visual-editor-container[data-v-4fea1865]{height:auto;min-height:400px}}.ant-form-item[data-v-4fea1865]{margin-bottom:16px}.editor-content[data-v-4fea1865]{padding:24px;background:#fff;min-height:500px;max-height:82vh;overflow-y:auto}.editor-layout[data-v-4fea1865]{min-height:450px}.code-editor-column[data-v-4fea1865]{height:100%}.code-editor-column[data-v-4fea1865],.code-section[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.code-section[data-v-4fea1865]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:12px;padding-bottom:12px;border-bottom:2px solid #f0f0f0}.code-section .section-header .section-title[data-v-4fea1865],.code-section .section-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.code-section .section-header .section-title[data-v-4fea1865]{font-weight:600;font-size:14px;color:#262626;gap:8px}.code-section .section-header .section-title[data-v-4fea1865]:before{content:"";display:inline-block;width:4px;height:14px;background:#1890ff;border-radius:2px}.code-section .section-header .section-actions[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link{color:#1890ff;padding:0 8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link:hover{color:#40a9ff}.code-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;overflow:hidden;height:62vh;min-height:520px;max-height:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05);box-shadow:inset 0 1px 3px rgba(0,0,0,.05);-webkit-transition:all .3s ease;transition:all .3s ease}.code-editor-container[data-v-4fea1865]:hover{border-color:#40a9ff}.code-editor-container[data-v-4fea1865]:focus-within{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05);box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05)}.code-editor-container[data-v-4fea1865] .CodeMirror{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;font-family:Courier New,Consolas,Liberation Mono,Menlo,monospace;font-size:13px;line-height:1.6;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fafafa}.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{-webkit-box-flex:1;-ms-flex:1;flex:1;min-height:100%;max-height:none;overflow-y:auto;overflow-x:auto}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:100%!important;padding-left:12px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-gutters{border-right:1px solid #e8e8e8;background:-webkit-gradient(linear,left top,right top,from(#fafafa),to(#f5f5f5));background:linear-gradient(90deg,#fafafa 0,#f5f5f5);width:45px;padding-right:4px}.code-editor-container[data-v-4fea1865] .CodeMirror-linenumber{padding:0 8px 0 4px;min-width:30px;text-align:right;color:#999;font-size:12px}.code-editor-container[data-v-4fea1865] .CodeMirror-lines{padding:12px 8px;background:#fff}.code-editor-container[data-v-4fea1865] .CodeMirror-line{padding-left:0}.code-editor-container[data-v-4fea1865] .CodeMirror-cursor{border-left:2px solid #1890ff}.code-editor-container[data-v-4fea1865] .CodeMirror-selected{background:#e6f7ff}.code-mode-split[data-v-4fea1865]{width:100%}.ai-pane[data-v-4fea1865],.ai-panel[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ai-panel[data-v-4fea1865]{border:1px solid #e8e8e8;border-radius:6px;background:#fafafa;padding:12px;height:62vh;min-height:520px}.ai-panel-title[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:10px;color:#262626}.ai-panel-hint[data-v-4fea1865]{margin-top:10px;color:#8c8c8c;font-size:12px;line-height:1.5}.ai-panel[data-v-4fea1865] textarea.ant-input{-webkit-box-flex:1;-ms-flex:1;flex:1;resize:none}.editor-footer[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px}.editor-footer[data-v-4fea1865] .ant-btn{height:36px;padding:0 20px;font-weight:500;border-radius:4px;-webkit-transition:all .3s ease;transition:all .3s ease}.editor-footer[data-v-4fea1865] .ant-btn:not(.ant-btn-primary):hover{border-color:#40a9ff;color:#40a9ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 8px rgba(24,144,255,.2);box-shadow:0 2px 8px rgba(24,144,255,.2)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary{-webkit-box-shadow:0 2px 4px rgba(24,144,255,.3);box-shadow:0 2px 4px rgba(24,144,255,.3)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary:hover{-webkit-box-shadow:0 4px 12px rgba(24,144,255,.4);box-shadow:0 4px 12px rgba(24,144,255,.4);-webkit-transform:translateY(-1px);transform:translateY(-1px)}@media (max-width:768px){.indicator-editor-modal[data-v-4fea1865] .ant-modal{width:100%!important;max-width:100%!important;margin:0!important;top:0!important;padding-bottom:0!important;max-height:100vh!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-content{height:100vh!important;max-height:100vh!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:0!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-header{-ms-flex-negative:0;flex-shrink:0;padding:16px;border-bottom:1px solid #e8e8e8}.indicator-editor-modal[data-v-4fea1865] .ant-modal-body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:0!important;min-height:0}.indicator-editor-modal[data-v-4fea1865] .ant-modal-footer{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;border-top:1px solid #e8e8e8}.editor-content[data-v-4fea1865]{padding:16px!important;min-height:auto!important;max-height:none!important;overflow-y:visible!important}.editor-layout[data-v-4fea1865]{min-height:auto!important}.code-editor-column[data-v-4fea1865]{width:100%!important;margin-bottom:16px}.code-section[data-v-4fea1865]{margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{padding-bottom:8px;margin-bottom:8px}.code-section .section-header .section-title[data-v-4fea1865]{font-size:13px}.code-editor-container[data-v-4fea1865]{height:250px!important}.code-editor-container[data-v-4fea1865],.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{min-height:250px!important;max-height:250px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:250px!important}.ai-panel[data-v-4fea1865]{height:auto!important;min-height:auto!important}.editor-footer[data-v-4fea1865]{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;gap:8px;padding:0}.editor-footer[data-v-4fea1865] .ant-btn{width:100%;height:40px;margin:0}}.chart-left[data-v-58f93984]{width:70%!important;-webkit-box-flex:0!important;-ms-flex:0 0 70%!important;flex:0 0 70%!important;position:relative;border-right:1px solid #e8e8e8;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}.chart-left.theme-dark[data-v-58f93984]{background:#141414;border-right-color:#2a2a2a}.chart-wrapper[data-v-58f93984]{width:100%;height:100%;position:relative;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;display:-webkit-box;display:-ms-flexbox;display:flex}.theme-dark .chart-wrapper[data-v-58f93984]{background:#141414}.drawing-toolbar[data-v-58f93984]{-ms-flex-negative:0;flex-shrink:0;width:40px;background:#fff;border-right:1px solid #e8e8e8;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 4px;gap:4px;z-index:10;overflow-y:auto;overflow-x:hidden}.chart-left.theme-dark .drawing-toolbar[data-v-58f93984]{background:#141414;border-right-color:#2a2a2a}.drawing-tool-btn[data-v-58f93984]{width:32px;height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;border-radius:4px;-webkit-transition:all .2s;transition:all .2s;color:#666;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .drawing-tool-btn[data-v-58f93984]{color:#d1d4dc}.drawing-tool-btn[data-v-58f93984]:hover{background:#f0f2f5;color:#1890ff}.chart-left.theme-dark .drawing-tool-btn[data-v-58f93984]:hover{background:#252525;color:#13c2c2}.drawing-tool-btn.active[data-v-58f93984]{background:#e6f7ff;color:#1890ff;border:1px solid #1890ff}.chart-left.theme-dark .drawing-tool-btn.active[data-v-58f93984]{background:#252525;color:#13c2c2;border-color:#13c2c2}.drawing-toolbar .ant-divider-vertical[data-v-58f93984]{margin:8px 0;height:20px}.indicator-toolbar[data-v-58f93984]{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 12px;background:#fff;border-bottom:1px solid #e8e8e8;-ms-flex-wrap:wrap;flex-wrap:wrap;z-index:1;position:relative;width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.indicator-toolbar[data-v-58f93984]::-webkit-scrollbar{display:none;width:0;height:0}.chart-content-area[data-v-58f93984]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden}.chart-left.theme-dark .indicator-toolbar[data-v-58f93984]{background:#141414;border-bottom-color:#2a2a2a}.indicator-btn[data-v-58f93984]{padding:4px 12px;font-size:12px;font-weight:600;color:#666;background:#f0f2f5;border:1px solid #e8e8e8;border-radius:4px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;min-width:40px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .indicator-btn[data-v-58f93984]{color:#d1d4dc;background:#252525;border-color:#2a2a2a}.indicator-btn[data-v-58f93984]:hover{color:#1890ff;border-color:#1890ff;background:#f0f8ff}.chart-left.theme-dark .indicator-btn[data-v-58f93984]:hover{color:#13c2c2;border-color:#13c2c2;background:#252525}.indicator-btn.active[data-v-58f93984]{color:#1890ff;background:#fff;border-color:#1890ff;border-width:2px;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.1);box-shadow:0 0 0 2px rgba(24,144,255,.1)}.chart-left.theme-dark .indicator-btn.active[data-v-58f93984]{color:#13c2c2;background:#252525;border-color:#13c2c2;-webkit-box-shadow:0 0 0 2px rgba(19,194,194,.2);box-shadow:0 0 0 2px rgba(19,194,194,.2)}.kline-chart-container[data-v-58f93984]{-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;min-width:0;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;overflow:hidden}.theme-dark .kline-chart-container[data-v-58f93984]{background:#141414}.chart-overlay[data-v-58f93984]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.95);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;backdrop-filter:blur(2px)}.chart-left.theme-dark .chart-overlay[data-v-58f93984]{background:hsla(0,0%,8%,.95)}.error-box[data-v-58f93984]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333}.initial-hint[data-v-58f93984]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .initial-hint[data-v-58f93984]{background:hsla(0,0%,8%,.98)}.hint-box[data-v-58f93984]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:400px;padding:20px}.pyodide-warning[data-v-58f93984]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .pyodide-warning[data-v-58f93984]{background:hsla(0,0%,8%,.98)}.warning-box[data-v-58f93984]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:500px;padding:20px}.warning-title[data-v-58f93984]{font-size:16px;font-weight:600;color:#faad14;margin-bottom:8px}.warning-desc[data-v-58f93984]{font-size:14px;color:#666;line-height:1.6}.chart-left.theme-dark .warning-box[data-v-58f93984]{color:#d1d4dc}.chart-left.theme-dark .warning-title[data-v-58f93984]{color:#faad14}.chart-left.theme-dark .warning-desc[data-v-58f93984]{color:#868993}.chart-left.theme-dark .hint-box[data-v-58f93984]{color:#d1d4dc}.hint-title[data-v-58f93984]{font-size:18px;font-weight:600;color:#333;margin-bottom:12px}.chart-left.theme-dark .hint-title[data-v-58f93984]{color:#d1d4dc}.hint-desc[data-v-58f93984]{font-size:14px;color:#999;line-height:1.6}.chart-left.theme-dark .hint-desc[data-v-58f93984]{color:#787b86}.history-loading-hint[data-v-58f93984]{position:absolute;left:20px;top:60px;z-index:1000!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 16px;background:hsla(0,0%,100%,.98)!important;border:1px solid #e8e8e8;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);font-size:14px;color:#666!important;backdrop-filter:blur(4px);pointer-events:none;visibility:visible!important;opacity:1!important}.chart-left.theme-dark .history-loading-hint[data-v-58f93984]{background:hsla(0,0%,8%,.98)!important;border-color:#2a2a2a;color:#d1d4dc!important}.loading-text[data-v-58f93984]{white-space:nowrap;margin-left:4px}@media (max-width:768px){.drawing-toolbar[data-v-58f93984]{display:none}.indicator-toolbar[data-v-58f93984]{padding-left:12px;-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.indicator-toolbar[data-v-58f93984]::-webkit-scrollbar{display:none;width:0;height:0}.indicator-btn[data-v-58f93984]{-ms-flex-negative:0;flex-shrink:0}}@media (max-width:1200px){.drawing-toolbar[data-v-58f93984]{display:none}.indicator-toolbar[data-v-58f93984]{padding-left:12px}.kline-chart-container[data-v-58f93984]{margin-left:0}.chart-left[data-v-58f93984]{width:100%!important;min-width:100%!important;border-right:none;border-bottom:1px solid #e8e8e8;height:600px!important;min-height:600px!important}.chart-wrapper[data-v-58f93984],.kline-chart-container[data-v-58f93984]{height:100%!important;min-height:600px!important}}@media (max-width:992px){.chart-left[data-v-58f93984]{height:650px!important;min-height:650px!important}.chart-wrapper[data-v-58f93984],.kline-chart-container[data-v-58f93984]{height:100%!important;min-height:650px!important}}@media (max-width:768px){.chart-left[data-v-58f93984]{height:60vh!important;min-height:400px!important;max-height:80vh!important}.chart-wrapper[data-v-58f93984]{height:100%!important;min-height:400px!important;max-height:100%!important}.kline-chart-container[data-v-58f93984]{height:calc(100% - 45px)!important;min-height:350px!important;max-height:calc(100% - 45px)!important}}@media (max-width:576px){.chart-left[data-v-58f93984]{height:55vh!important;min-height:350px!important;max-height:75vh!important}.chart-wrapper[data-v-58f93984]{height:100%!important;min-height:350px!important;max-height:100%!important}.kline-chart-container[data-v-58f93984]{height:calc(100% - 45px)!important;min-height:300px!important;max-height:calc(100% - 45px)!important}}[data-v-473e449c] .ant-form-item-label{white-space:normal;line-height:1.2}[data-v-473e449c] .ant-form-item-label>label{white-space:normal}[data-v-473e449c] .ant-form-item-control{min-width:0}.backtest-modal[data-v-473e449c] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.backtest-content[data-v-473e449c]{position:relative}.field-hint[data-v-473e449c]{margin-top:4px;font-size:12px;line-height:1.4;color:#8c8c8c}.section-title[data-v-473e449c]{font-size:15px;font-weight:600;color:#262626;margin-bottom:16px;padding-bottom:8px;border-bottom:2px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.section-title .anticon[data-v-473e449c]{color:#1890ff}.config-section[data-v-473e449c]{margin-bottom:24px}.precision-info[data-v-473e449c]{-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.date-quick-select[data-v-473e449c],.precision-info[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.date-quick-select[data-v-473e449c]{padding:8px 12px;background:#fafafa;border-radius:6px;border:1px solid #f0f0f0}.result-section[data-v-473e449c]{margin-top:24px}.metrics-cards[data-v-473e449c]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}@media (max-width:1200px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(4,1fr)}}@media (max-width:992px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(3,1fr)}}@media (max-width:576px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(2,1fr)}}.metric-card[data-v-473e449c]{background:#fafafa;border-radius:8px;padding:16px;text-align:center;-webkit-transition:all .3s;transition:all .3s}.metric-card[data-v-473e449c]:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.1);box-shadow:0 2px 8px rgba(0,0,0,.1)}.metric-card.positive[data-v-473e449c]{background:linear-gradient(135deg,#f6ffed,#d9f7be)}.metric-card.positive .metric-value[data-v-473e449c]{color:#52c41a}.metric-card.negative[data-v-473e449c]{background:linear-gradient(135deg,#fff2f0,#ffccc7)}.metric-card.negative .metric-value[data-v-473e449c]{color:#f5222d}.metric-card .metric-label[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.metric-card .metric-value[data-v-473e449c]{font-size:20px;font-weight:700;color:#262626}.metric-card .metric-amount[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-top:4px}.chart-section[data-v-473e449c]{margin-bottom:24px}.chart-title[data-v-473e449c]{font-size:14px;font-weight:600;color:#595959;margin-bottom:12px}.equity-chart[data-v-473e449c]{width:100%;height:300px;border:1px solid #f0f0f0;border-radius:8px}.trades-section[data-v-473e449c]{margin-top:24px}.loading-overlay[data-v-473e449c]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:100;border-radius:8px}.loading-overlay .loading-content[data-v-473e449c]{text-align:center}.loading-overlay .loading-animation[data-v-473e449c]{margin-bottom:20px}.loading-overlay .chart-bars[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;height:60px;gap:6px}.loading-overlay .bar[data-v-473e449c]{width:8px;background:-webkit-gradient(linear,left top,left bottom,from(#1890ff),to(#52c41a));background:linear-gradient(180deg,#1890ff,#52c41a);border-radius:4px;-webkit-animation:barPulse-473e449c 1.2s ease-in-out infinite;animation:barPulse-473e449c 1.2s ease-in-out infinite}.loading-overlay .bar1[data-v-473e449c]{height:20px;-webkit-animation-delay:0s;animation-delay:0s}.loading-overlay .bar2[data-v-473e449c]{height:35px;-webkit-animation-delay:.1s;animation-delay:.1s}.loading-overlay .bar3[data-v-473e449c]{height:50px;-webkit-animation-delay:.2s;animation-delay:.2s}.loading-overlay .bar4[data-v-473e449c]{height:35px;-webkit-animation-delay:.3s;animation-delay:.3s}.loading-overlay .bar5[data-v-473e449c]{height:20px;-webkit-animation-delay:.4s;animation-delay:.4s}@-webkit-keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}@keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}.loading-overlay .loading-text[data-v-473e449c]{font-size:16px;font-weight:500;color:#1890ff;margin-bottom:8px}.loading-overlay .loading-subtext[data-v-473e449c]{font-size:13px;color:#666;-webkit-animation:fadeInOut-473e449c 2s ease-in-out infinite;animation:fadeInOut-473e449c 2s ease-in-out infinite}@-webkit-keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}@keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}.backtest-run-viewer[data-v-a484239a] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.metrics-cards[data-v-a484239a]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.metric-card[data-v-a484239a]{background:#fff;border:1px solid #f0f0f0;border-radius:8px;padding:12px}.metric-card.positive[data-v-a484239a]{border-color:rgba(82,196,26,.35)}.metric-card.negative[data-v-a484239a]{border-color:rgba(245,34,45,.35)}.metric-label[data-v-a484239a]{color:#8c8c8c;font-size:12px}.metric-value[data-v-a484239a]{font-size:18px;font-weight:600;margin-top:4px}.metric-amount[data-v-a484239a]{color:#8c8c8c;font-size:12px;margin-top:4px}.chart-section[data-v-a484239a]{margin-top:8px}.chart-title[data-v-a484239a]{font-weight:600;margin:8px 0;color:#262626}.equity-chart[data-v-a484239a]{width:100%;height:280px}.trades-section[data-v-a484239a]{margin-top:16px}.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.chart-container[data-v-211c2fea]{background:#f0f2f5;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.chart-container[data-v-211c2fea],.chart-header[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;min-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-header[data-v-211c2fea]{max-width:100%;background:#fff;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.02);box-shadow:0 2px 4px rgba(0,0,0,.02)}.header-top[data-v-211c2fea]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;height:60px}.header-left[data-v-211c2fea],.header-top[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.header-left[data-v-211c2fea]{gap:20px}.symbol-select[data-v-211c2fea]{width:220px}.symbol-select[data-v-211c2fea] .ant-select-selection{background-color:#fff;border:1px solid #e8e8e8;color:#333;border-radius:4px;-webkit-box-shadow:none;box-shadow:none}.symbol-select[data-v-211c2fea] .ant-select-selection:hover{border-color:#1890ff}.symbol-select[data-v-211c2fea] .ant-select-focused .ant-select-selection{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.symbol-select[data-v-211c2fea] .ant-select-arrow,.symbol-select[data-v-211c2fea] .ant-select-selection__placeholder{color:#999}.timeframe-group[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f0f2f5;border-radius:4px;padding:2px}.timeframe-item[data-v-211c2fea]{padding:4px 12px;font-size:13px;font-weight:600;color:#666;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-radius:4px}.timeframe-item[data-v-211c2fea]:hover{color:#1890ff;background:#fff}.timeframe-item.active[data-v-211c2fea]{color:#1890ff;background:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.current-symbol[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:24px}.symbol-info[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.symbol-label[data-v-211c2fea]{font-size:16px;font-weight:700;color:#333;line-height:1.2}.market-tag[data-v-211c2fea]{font-size:10px;color:#666;background:#f0f2f5;padding:1px 4px;border-radius:2px;margin-top:2px}.price-info[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.price-info.color-up[data-v-211c2fea]{color:#0ecb81}.price-info.color-down[data-v-211c2fea]{color:#f6465d}.symbol-price[data-v-211c2fea]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace;line-height:1.2}.symbol-change[data-v-211c2fea]{font-size:12px}.mobile-symbol-price[data-v-211c2fea]{display:none}.panel-header .theme-switcher[data-v-211c2fea]{margin-left:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.panel-header .realtime-toggle-btn[data-v-211c2fea],.panel-header .theme-toggle-btn[data-v-211c2fea]{color:#666;border:none;padding:4px 8px;-webkit-transition:all .3s;transition:all .3s;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:4px;min-width:32px;height:32px}.panel-header .realtime-toggle-btn[data-v-211c2fea]:hover,.panel-header .theme-toggle-btn[data-v-211c2fea]:hover{color:#1890ff;background:#f0f2f5}.panel-header .realtime-toggle-btn.active[data-v-211c2fea],.panel-header .theme-toggle-btn.active[data-v-211c2fea]{color:#1890ff;background:#e6f7ff}.panel-header .realtime-toggle-btn .anticon[data-v-211c2fea],.panel-header .theme-toggle-btn .anticon[data-v-211c2fea]{font-size:16px}.chart-content[data-v-211c2fea]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:100%;max-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-content[data-v-211c2fea],.chart-main-row[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;width:100%}.chart-main-row[data-v-211c2fea]{height:80vh!important;min-height:500px!important;max-height:80vh!important;-ms-flex-negative:0;flex-shrink:0}.chart-right[data-v-211c2fea]{width:30%!important;-webkit-box-flex:0!important;-ms-flex:0 0 30%!important;flex:0 0 30%!important;border-left:1px solid #e8e8e8}.chart-right[data-v-211c2fea],.indicators-panel[data-v-211c2fea]{background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicators-panel[data-v-211c2fea]{height:100%}.panel-header[data-v-211c2fea]{height:48px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;border-bottom:1px solid #e8e8e8;font-weight:600;color:#333;background:#fff}.panel-header .mobile-header-create-btn[data-v-211c2fea]{margin-right:0}.panel-body[data-v-211c2fea]{padding:0;overflow:hidden}.indicator-section[data-v-211c2fea],.panel-body[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicator-section[data-v-211c2fea]{min-height:0;border-bottom:1px solid #e8e8e8}.indicator-section[data-v-211c2fea]:last-child{border-bottom:none}.indicator-section.section-empty[data-v-211c2fea]{min-height:200px}.section-label[data-v-211c2fea]{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;background:#fafafa;border-bottom:1px solid #e8e8e8;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.section-label .section-label-left[data-v-211c2fea],.section-label[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.section-label .section-label-left[data-v-211c2fea]{gap:8px;-webkit-box-flex:1;-ms-flex:1;flex:1}.section-label .section-label-left .collapse-icon[data-v-211c2fea]{font-size:12px;color:#999;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.section-label .section-label-left span[data-v-211c2fea]{font-weight:500}.section-label .buy-indicator-btn[data-v-211c2fea]{padding:0;height:auto;margin-left:8px}.create-indicator-btn[data-v-211c2fea]{margin-left:auto;margin-right:0}@media (max-width:768px){.create-indicator-btn[data-v-211c2fea]{display:none!important}}.section-content[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px 16px;min-height:0}.indicator-card[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;padding:10px 12px;border-radius:6px;margin-bottom:8px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:1px solid #e8e8e8}.indicator-card[data-v-211c2fea]:hover{background:#f0f2f5;border-color:#1890ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.05);box-shadow:0 2px 4px rgba(0,0,0,.05)}.indicator-card.active[data-v-211c2fea]{background:#e6f7ff;border-color:#1890ff}.indicator-card.active .card-name[data-v-211c2fea]{color:#1890ff}.indicator-card.indicator-active[data-v-211c2fea]{border-color:#52c41a;border-width:2px;background:#f6ffed}.indicator-card.indicator-active[data-v-211c2fea]:hover{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.2);box-shadow:0 2px 8px rgba(82,196,26,.2)}.indicator-card.indicator-active .card-name[data-v-211c2fea]{color:#52c41a}.indicator-card.disabled[data-v-211c2fea]{opacity:.5;cursor:not-allowed}.indicator-card.disabled[data-v-211c2fea]:hover{-webkit-transform:none;transform:none;background:#fff;border-color:#e8e8e8;-webkit-box-shadow:none;box-shadow:none}.card-content[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.card-header[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:4px}.card-name[data-v-211c2fea]{font-size:13px;color:#333;font-weight:500;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-right:8px}.card-params[data-v-211c2fea]{font-size:11px;color:#999;margin-top:2px}.card-desc[data-v-211c2fea]{font-size:11px;color:#999;margin-top:0;display:-webkit-box;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.4;min-height:1.4em;max-height:2.8em}.card-action[data-v-211c2fea]{color:#999;font-size:12px}.card-action[data-v-211c2fea]:hover{color:#1890ff}.card-actions[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;-ms-flex-negative:0;flex-shrink:0}.action-icon[data-v-211c2fea]{font-size:16px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;color:#999}.action-icon.edit-icon[data-v-211c2fea]{color:#1890ff}.action-icon.edit-icon[data-v-211c2fea]:hover{color:#40a9ff}.action-icon.delete-icon[data-v-211c2fea]{color:#ff4d4f}.action-icon.delete-icon[data-v-211c2fea]:hover{color:#ff7875}.action-icon[data-v-211c2fea]:hover{color:#1890ff}.action-icon.toggle-icon.active[data-v-211c2fea]{color:#52c41a}.action-icon.backtest-icon[data-v-211c2fea]{color:#722ed1}.action-icon.backtest-icon[data-v-211c2fea]:hover{color:#9254de}.action-icon.backtest-history-icon[data-v-211c2fea]{color:#13c2c2}.action-icon.backtest-history-icon[data-v-211c2fea]:hover{color:#08979c}.action-icon.publish-icon[data-v-211c2fea]{color:#1890ff}.action-icon.publish-icon[data-v-211c2fea]:hover{color:#40a9ff}.action-icon.publish-icon.published[data-v-211c2fea]{color:#52c41a}.action-icon.publish-icon.published[data-v-211c2fea]:hover{color:#73d13d}.action-icon.status-icon.status-normal[data-v-211c2fea]{color:#52c41a}.action-icon.status-icon.status-expired[data-v-211c2fea]{color:#ff4d4f}.action-icon.expiry-icon[data-v-211c2fea]{color:#1890ff}.empty-indicators[data-v-211c2fea]{padding:40px 20px;gap:8px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.empty-indicators[data-v-211c2fea],.loading-indicators[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#999;font-size:13px}.loading-indicators[data-v-211c2fea]{padding:20px}.custom-scrollbar[data-v-211c2fea]{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar[data-v-211c2fea]::-webkit-scrollbar{display:none;width:0;height:0}.dark-dropdown{background-color:#fff;border:1px solid #e8e8e8;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.dark-dropdown .ant-select-dropdown-menu-item{color:#333}.dark-dropdown .ant-select-dropdown-menu-item:hover{background-color:#f0f2f5}.dark-dropdown .ant-select-dropdown-menu-item-active{background-color:#e6f7ff;color:#1890ff}.dark-dropdown .ant-empty-description{color:#999}.symbol-option[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.symbol-option .symbol-name[data-v-211c2fea]{font-weight:600;color:#8f8d8d;margin-right:8px}.symbol-option .symbol-name-extra[data-v-211c2fea]{font-size:12px;color:#999;margin-left:4px}.empty-watchlist-hint[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#666;font-size:12px}@media (max-width:768px){.chart-container[data-v-211c2fea]{padding:0;width:calc(100% + 44px)!important;margin:-22px}.chart-header[data-v-211c2fea]{padding:12px}.chart-header .header-top[data-v-211c2fea],.chart-header[data-v-211c2fea]{gap:12px;height:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-header .header-top[data-v-211c2fea]{padding:0}.chart-header .header-left[data-v-211c2fea]{width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.chart-header .search-section[data-v-211c2fea]{width:100%}.chart-header .search-section .symbol-select[data-v-211c2fea]{width:100%!important}.chart-header .timeframe-group[data-v-211c2fea]{width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.chart-header .timeframe-group .timeframe-item[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:calc(14.28% - 4px);text-align:center;padding:6px 8px;font-size:12px}.chart-header .current-symbol[data-v-211c2fea]{display:none}.chart-content[data-v-211c2fea]{overflow-y:auto}.chart-content[data-v-211c2fea],.chart-main-row[data-v-211c2fea]{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important;height:auto!important;min-height:auto!important;max-height:none!important}.mobile-symbol-price[data-v-211c2fea]{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 16px;background:#fff;width:100%}.mobile-symbol-price .mobile-price-info[data-v-211c2fea],.mobile-symbol-price[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mobile-symbol-price .mobile-price-info[data-v-211c2fea]{gap:12px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.mobile-symbol-price .mobile-price-info.color-up[data-v-211c2fea]{color:#0ecb81}.mobile-symbol-price .mobile-price-info.color-down[data-v-211c2fea]{color:#f6465d}.mobile-symbol-price .mobile-price-info .mobile-symbol-price[data-v-211c2fea]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace}.mobile-symbol-price .mobile-price-info .mobile-symbol-change[data-v-211c2fea]{font-size:14px;font-weight:500}kline-chart[data-v-211c2fea]{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important;width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;display:block!important;margin-bottom:0!important}kline-chart[data-v-211c2fea] .chart-left{width:100%!important;height:350px!important;min-height:350px!important;max-height:350px!important;border-right:none!important;border-bottom:1px solid #e8e8e8!important}.chart-right[data-v-211c2fea]{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;width:100%!important;min-width:100%!important;max-width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;height:auto!important;max-height:calc(100vh - 470px)!important;border-left:none!important;border-top:none!important;margin-top:0!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;visibility:visible!important;opacity:1!important}.chart-right .indicators-panel[data-v-211c2fea]{height:auto!important;min-height:600px!important;max-height:calc(100vh - 410px)!important;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .panel-header[data-v-211c2fea]{position:sticky;top:0;background:#fff;z-index:10;border-bottom:1px solid #e8e8e8;padding:12px;font-size:14px;-ms-flex-negative:0;flex-shrink:0}.chart-right .indicators-panel .panel-header .mobile-header-create-btn[data-v-211c2fea]{margin-right:0;font-size:12px;height:28px;padding:0 12px}.chart-right .indicators-panel .panel-body[data-v-211c2fea]{padding:0;overflow:visible;min-height:400px!important}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea],.chart-right .indicators-panel .panel-body[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea]{overflow:hidden;min-height:0;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-bar{margin-bottom:0;-ms-flex-negative:0;flex-shrink:0;border-bottom:1px solid #e8e8e8}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab{color:#666;font-size:14px}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab-active{color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-ink-bar{background-color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-content{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tabpane{height:100%;overflow:hidden;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tabpane-active{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;height:100%;overflow:hidden}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-211c2fea],.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-content-holder{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-211c2fea]{width:100%}.chart-right .indicators-panel .mobile-indicator-tabs .section-content[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto!important;overflow-x:hidden;padding:12px;min-height:0;height:100%;-webkit-overflow-scrolling:touch;position:relative}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-211c2fea],.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn[data-v-211c2fea]{display:none!important}.chart-right .indicators-panel .indicator-section .section-label[data-v-211c2fea]{padding:10px 12px;font-size:13px}.chart-right .indicators-panel .section-content[data-v-211c2fea]{padding:10px 12px}.chart-right .indicators-panel .indicator-card[data-v-211c2fea]{padding:10px}.chart-right .indicators-panel .indicator-card .card-name[data-v-211c2fea]{font-size:13px}.chart-right .indicators-panel .indicator-card .card-desc[data-v-211c2fea],.chart-right .indicators-panel .indicator-card .card-params[data-v-211c2fea]{font-size:11px}}.qt-header-btn[data-v-211c2fea]{margin-left:16px;background:linear-gradient(135deg,#1890ff,#722ed1);border:none;color:#fff;border-radius:6px;font-weight:600;font-size:12px;padding:0 12px;height:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;-webkit-box-shadow:0 2px 8px rgba(24,144,255,.3);box-shadow:0 2px 8px rgba(24,144,255,.3);-webkit-transition:all .3s;transition:all .3s}.qt-header-btn[data-v-211c2fea]:focus,.qt-header-btn[data-v-211c2fea]:hover{background:linear-gradient(135deg,#40a9ff,#9254de);color:#fff;-webkit-box-shadow:0 4px 12px rgba(24,144,255,.45);box-shadow:0 4px 12px rgba(24,144,255,.45);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.qt-floating-btn[data-v-211c2fea]{position:fixed;right:24px;bottom:80px;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:999;-webkit-transition:all .3s;transition:all .3s;font-size:22px}.qt-floating-btn[data-v-211c2fea]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(24,144,255,.55);box-shadow:0 6px 24px rgba(24,144,255,.55)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark[data-v-211c2fea],body.dark,body.realdark{background:#141414;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.3);box-shadow:0 2px 4px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .symbol-label[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .market-tag[data-v-211c2fea],body.dark,body.realdark{color:#888;background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-up[data-v-211c2fea],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-down[data-v-211c2fea],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-211c2fea],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 2px 8px rgba(23,125,220,.35);box-shadow:0 2px 8px rgba(23,125,220,.35)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-211c2fea]:focus,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-211c2fea]:hover,body.dark,body.realdark{background:linear-gradient(135deg,#3c9ae8,#854eca);-webkit-box-shadow:0 4px 12px rgba(23,125,220,.5);box-shadow:0 4px 12px rgba(23,125,220,.5)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-211c2fea],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 4px 16px rgba(23,125,220,.45);box-shadow:0 4px 16px rgba(23,125,220,.45)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-211c2fea]:hover,body.dark,body.realdark{-webkit-box-shadow:0 6px 24px rgba(23,125,220,.6);box-shadow:0 6px 24px rgba(23,125,220,.6)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection,body.dark,body.realdark{background-color:#1c1c1c;border-color:#2a2a2a;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection:hover,body.dark,body.realdark{border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-focused .ant-select-selection,body.dark,body.realdark{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.3);box-shadow:0 0 0 2px rgba(24,144,255,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-arrow,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection__placeholder,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group[data-v-211c2fea],body.dark,body.realdark{background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff;background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item.active[data-v-211c2fea],body.dark,body.realdark{color:#1890ff;background:#1c1c1c;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-211c2fea],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-211c2fea],body.dark,body.realdark{color:#888;background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-211c2fea],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-211c2fea],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-left-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn.active[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff;background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-body[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-section[data-v-211c2fea],body.dark,body.realdark{border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label[data-v-211c2fea],body.dark,body.realdark{color:#868993;background:#2a2a2a;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left .collapse-icon[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left span[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-211c2fea],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-211c2fea]:hover,body.dark,body.realdark{background:#2a2a2a;border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active .card-name[data-v-211c2fea],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-211c2fea],body.dark,body.realdark{border-color:#52c41a;background:#1e3a1e}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-211c2fea]:hover,body.dark,body.realdark{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.3);box-shadow:0 2px 8px rgba(82,196,26,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active .card-name[data-v-211c2fea],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-name[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-desc[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-params[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-211c2fea],body.dark,body.realdark{color:#ff4d4f}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#ff7875}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-211c2fea],body.dark,body.realdark{color:#b37feb}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#d3adf7}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-211c2fea],body.dark,body.realdark{color:#5cdbd3}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#87e8de}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-211c2fea],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-211c2fea],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-211c2fea]:hover,body.dark,body.realdark{color:#73d13d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.toggle-icon.active[data-v-211c2fea],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .empty-indicators[data-v-211c2fea],body.dark,body.realdark{color:#868993}@media (max-width:768px){.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .current-symbol[data-v-211c2fea],body.dark,body.realdark{border-top-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-left[data-v-211c2fea],body.dark,body.realdark{border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-211c2fea],body.dark,body.realdark{border-top-color:#2a2a2a;max-height:500px!important}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-bar,body.dark,body.realdark{border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab-active,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-ink-bar,body.dark,body.realdark{background-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-211c2fea],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-211c2fea],body.dark,body.realdark{color:#868993;background:#2a3932}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-211c2fea],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-211c2fea],body.dark,body.realdark{color:#f6465d}}.add-stock-modal-content .market-tabs[data-v-211c2fea]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-211c2fea],.add-stock-modal-content .search-results-section[data-v-211c2fea],.add-stock-modal-content .symbol-search-section[data-v-211c2fea]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-211c2fea],.add-stock-modal-content .search-results-section .section-title[data-v-211c2fea]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-211c2fea]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-211c2fea]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-211c2fea]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-211c2fea]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-211c2fea]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-211c2fea]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.chart-container.theme-dark .add-stock-modal-content .hot-symbols-section .section-title[data-v-211c2fea],.chart-container.theme-dark .add-stock-modal-content .search-results-section .section-title[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list[data-v-211c2fea],body.dark,body.realdark{border-color:#363c4e;background-color:#2a2a2a}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item[data-v-211c2fea]:hover,body.dark,body.realdark{background-color:#363c4e}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-211c2fea],body.dark,body.realdark{color:#868993}.params-config-modal .indicator-info[data-v-211c2fea]{text-align:center;margin-bottom:8px}.params-config-modal .indicator-info .indicator-name[data-v-211c2fea]{font-size:16px;font-weight:600;color:#1f1f1f}.params-config-modal .params-form .param-item[data-v-211c2fea]{margin-bottom:16px}.params-config-modal .params-form .param-item .param-header[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:6px}.params-config-modal .params-form .param-item .param-header .param-label[data-v-211c2fea]{font-weight:500;color:#333}.theme-dark .params-config-modal .indicator-info .indicator-name[data-v-211c2fea]{color:#e0e0e0}.theme-dark .params-config-modal .params-form .param-item .param-header .param-label[data-v-211c2fea]{color:#d0d0d0} \ No newline at end of file diff --git a/frontend/dist/css/397.20e2b587.css b/frontend/dist/css/397.20e2b587.css deleted file mode 100644 index b52c133..0000000 --- a/frontend/dist/css/397.20e2b587.css +++ /dev/null @@ -1 +0,0 @@ -.settings-page[data-v-20857e25]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.settings-page .restart-alert[data-v-20857e25]{margin-bottom:16px;border-radius:8px}.settings-page .settings-header[data-v-20857e25]{margin-bottom:24px}.settings-page .settings-header .page-title[data-v-20857e25]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.settings-page .settings-header .page-title .anticon[data-v-20857e25]{font-size:28px;color:#1890ff}.settings-page .settings-header .page-desc[data-v-20857e25]{color:#64748b;font-size:14px;margin:0}.settings-page .settings-content[data-v-20857e25]{margin-bottom:80px}.settings-page .openrouter-balance-card[data-v-20857e25]{margin-bottom:20px}.settings-page .openrouter-balance-card .ant-card[data-v-20857e25]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border:1px solid #91d5ff;border-radius:8px}.settings-page .openrouter-balance-card .balance-header[data-v-20857e25]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:12px}.settings-page .openrouter-balance-card .balance-header .balance-title[data-v-20857e25]{font-size:15px;font-weight:600;color:#1890ff}.settings-page .openrouter-balance-card .balance-info[data-v-20857e25]{padding:8px 0}.settings-page .openrouter-balance-card .balance-info[data-v-20857e25] .ant-statistic-title{font-size:12px;color:#666}.settings-page .openrouter-balance-card .balance-info[data-v-20857e25] .ant-statistic-content{font-size:18px}.settings-page .openrouter-balance-card .balance-info .free-tier-badge[data-v-20857e25]{margin-top:12px;text-align:right}.settings-page .openrouter-balance-card .balance-empty[data-v-20857e25]{color:#8c8c8c;font-size:13px;padding:8px 0}.settings-page .settings-collapse[data-v-20857e25]{background:transparent}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item{margin-bottom:16px;border:none;border-radius:12px;overflow:hidden;background:#fff;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header{font-size:16px;font-weight:600;color:#1e3a5f;padding:16px 24px;padding-left:48px;background:linear-gradient(135deg,#fff,#f8fafc);border-bottom:1px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .ant-collapse-arrow{color:#1890ff;left:20px}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{font-size:18px;color:#1890ff}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{font-size:16px}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content{border-top:none}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{padding:24px}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label{padding-bottom:4px}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label label{color:#475569;font-weight:500}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-ms-flex-wrap:wrap;flex-wrap:wrap}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .label-text{color:#475569;font-weight:500}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon{font-size:14px;color:#94a3b8;cursor:help;-webkit-transition:color .2s;transition:color .2s}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#1890ff}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link{font-size:12px;font-weight:400;color:#1890ff;text-decoration:none;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:2px 8px;background:rgba(24,144,255,.08);border-radius:4px;-webkit-transition:all .2s;transition:all .2s;margin-left:4px}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.15);color:#0076e4}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link .anticon{font-size:11px}.settings-page .settings-form[data-v-20857e25] .ant-input,.settings-page .settings-form[data-v-20857e25] .ant-input-number,.settings-page .settings-form[data-v-20857e25] .ant-select-selection{border-radius:8px}.settings-page .settings-form[data-v-20857e25] .ant-input-number{width:100%}.settings-page .settings-form .password-field .field-hint[data-v-20857e25]{margin-top:4px;font-size:12px;color:#52c41a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.settings-page .settings-form .field-default[data-v-20857e25]{margin-top:4px;font-size:12px;color:#94a3b8}.settings-page .settings-footer[data-v-20857e25]{position:fixed;bottom:0;left:208px;right:0;padding:16px 24px;background:#fff;-webkit-box-shadow:0 -4px 20px rgba(0,0,0,.08);box-shadow:0 -4px 20px rgba(0,0,0,.08);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px;z-index:100}.settings-page .settings-footer .ant-btn[data-v-20857e25]{min-width:100px;height:40px;border-radius:8px;font-weight:500}.settings-page.theme-dark[data-v-20857e25]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.settings-page.theme-dark .restart-alert[data-v-20857e25]{background:#2d333b;border-color:#b08800}.settings-page.theme-dark .settings-header .page-title[data-v-20857e25]{color:#e0e6ed}.settings-page.theme-dark .settings-header .page-desc[data-v-20857e25]{color:#8b949e}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header{background:linear-gradient(135deg,#252a36,#1e222d);color:#e0e6ed;border-bottom-color:hsla(0,0%,100%,.06)}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{color:#58a6ff}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{color:#e0e6ed}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content,.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{background:#1e222d}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .label-text,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label label{color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon{color:#6e7681}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link{background:rgba(24,144,255,.15);color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.25)}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection{background:#0d1117;border-color:#30363d;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection:hover{border-color:#1890ff}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number-input{background:transparent;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-arrow{color:#8b949e}.settings-page.theme-dark .settings-form .field-default[data-v-20857e25]{color:#6e7681}.settings-page.theme-dark .settings-footer[data-v-20857e25]{background:#1e222d;border-top:1px solid hsla(0,0%,100%,.06);-webkit-box-shadow:0 -4px 24px rgba(0,0,0,.25);box-shadow:0 -4px 24px rgba(0,0,0,.25)}@media (max-width:768px){.settings-page[data-v-20857e25]{padding:16px}.settings-page .settings-footer[data-v-20857e25]{left:0;padding:12px 16px}} \ No newline at end of file diff --git a/frontend/dist/css/40.02ed56c8.css b/frontend/dist/css/40.02ed56c8.css deleted file mode 100644 index 0244b44..0000000 --- a/frontend/dist/css/40.02ed56c8.css +++ /dev/null @@ -1 +0,0 @@ -.dashboard-pro[data-v-16dc1b35]{min-height:100vh;padding:20px;background:#f8fafc;-webkit-transition:background .3s;transition:background .3s}.dashboard-pro.theme-dark[data-v-16dc1b35]{background:#0f172a}.dashboard-pro.theme-dark .kpi-card[data-v-16dc1b35]{background:#1e293b;border-color:#334155}.dashboard-pro.theme-dark .kpi-card .kpi-label[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .kpi-card .kpi-value .amount[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .kpi-card .kpi-sub[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .chart-panel[data-v-16dc1b35],.dashboard-pro.theme-dark .table-panel[data-v-16dc1b35]{background:#1e293b;border-color:#334155}.dashboard-pro.theme-dark .chart-panel .panel-header[data-v-16dc1b35],.dashboard-pro.theme-dark .table-panel .panel-header[data-v-16dc1b35]{border-color:#334155}.dashboard-pro.theme-dark .chart-panel .panel-header .panel-title[data-v-16dc1b35],.dashboard-pro.theme-dark .table-panel .panel-header .panel-title[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card[data-v-16dc1b35]{background:rgba(51,65,85,.5);border-color:#334155}.dashboard-pro.theme-dark .ranking-card .rank-name[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .ranking-card .rank-stats label[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .calendar-nav .current-month[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .calendar-nav .ant-btn-link[data-v-16dc1b35],.dashboard-pro.theme-dark .profit-calendar .calendar-empty[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .profit-calendar .month-summary[data-v-16dc1b35]{background:rgba(51,65,85,.5)}.dashboard-pro.theme-dark .profit-calendar .calendar-weekdays .weekday[data-v-16dc1b35],.dashboard-pro.theme-dark .profit-calendar .month-summary .summary-label[data-v-16dc1b35]{color:#94a3b8}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell[data-v-16dc1b35]{background:rgba(51,65,85,.3)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-16dc1b35]{background:rgba(51,65,85,.2)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.profit[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(34,197,94,.15),rgba(34,197,94,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.loss[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(239,68,68,.15),rgba(239,68,68,.25))}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell.zero[data-v-16dc1b35]{background:rgba(100,116,139,.2)}.dashboard-pro.theme-dark .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-16dc1b35]{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table{background:transparent;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-thead>tr>th{background:rgba(51,65,85,.5);color:#94a3b8;border-color:#334155}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-tbody>tr>td{border-color:#334155;color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-tbody>tr:hover>td{background:rgba(51,65,85,.3)}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-placeholder{background:transparent}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-table-placeholder .ant-empty-description{color:#94a3b8}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-item{background:#1e293b;border-color:#334155}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-item a{color:#f1f5f9}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-item.ant-pagination-item-active{background:#3b82f6;border-color:#3b82f6}.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.dashboard-pro.theme-dark .pro-table[data-v-16dc1b35] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e293b;border-color:#334155;color:#f1f5f9}.dashboard-pro .kpi-grid[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}.dashboard-pro .kpi-card[data-v-16dc1b35]{position:relative;background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:20px;overflow:hidden;-webkit-transition:all .3s cubic-bezier(.4,0,.2,1);transition:all .3s cubic-bezier(.4,0,.2,1)}.dashboard-pro .kpi-card[data-v-16dc1b35]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 10px 40px rgba(0,0,0,.1);box-shadow:0 10px 40px rgba(0,0,0,.1)}.dashboard-pro .kpi-card.clickable[data-v-16dc1b35]{cursor:pointer}.dashboard-pro .kpi-card.clickable .card-arrow[data-v-16dc1b35]{position:absolute;right:16px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);opacity:.4;-webkit-transition:all .3s;transition:all .3s}.dashboard-pro .kpi-card.clickable:hover .card-arrow[data-v-16dc1b35]{opacity:1;right:12px}.dashboard-pro .kpi-card .kpi-glow[data-v-16dc1b35]{position:absolute;top:-50%;right:-50%;width:100%;height:100%;background:radial-gradient(circle,rgba(59,130,246,.15) 0,transparent 70%);pointer-events:none}.dashboard-pro .kpi-card .kpi-content[data-v-16dc1b35]{position:relative;z-index:1}.dashboard-pro .kpi-card .kpi-header[data-v-16dc1b35]{gap:8px;margin-bottom:12px}.dashboard-pro .kpi-card .kpi-header[data-v-16dc1b35],.dashboard-pro .kpi-card .kpi-icon[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .kpi-card .kpi-icon[data-v-16dc1b35]{width:32px;height:32px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;background:rgba(59,130,246,.1);color:#3b82f6;font-size:16px}.dashboard-pro .kpi-card .kpi-label[data-v-16dc1b35]{font-size:12px;font-weight:600;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .kpi-card .kpi-value[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:2px}.dashboard-pro .kpi-card .kpi-value .currency[data-v-16dc1b35]{font-size:18px;font-weight:500;color:#64748b}.dashboard-pro .kpi-card .kpi-value .amount[data-v-16dc1b35]{font-size:28px;font-weight:700;color:#1e293b;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}.dashboard-pro .kpi-card .kpi-value .unit[data-v-16dc1b35]{font-size:14px;font-weight:500;color:#64748b;margin-left:4px}.dashboard-pro .kpi-card .kpi-sub[data-v-16dc1b35]{margin-top:8px;font-size:12px;color:#64748b}.dashboard-pro .kpi-card .kpi-sub .label[data-v-16dc1b35]{margin:0 2px}.dashboard-pro .kpi-card .kpi-sub .divider[data-v-16dc1b35]{margin:0 6px;opacity:.5}.dashboard-pro .kpi-card .kpi-sub .highlight[data-v-16dc1b35]{font-weight:600;color:#3b82f6}.dashboard-pro .kpi-card.kpi-primary[data-v-16dc1b35]{background:linear-gradient(135deg,#1e40af,#3b82f6 50%,#60a5fa);border:none}.dashboard-pro .kpi-card.kpi-primary .kpi-icon[data-v-16dc1b35]{background:hsla(0,0%,100%,.2);color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-label[data-v-16dc1b35]{color:hsla(0,0%,100%,.8)}.dashboard-pro .kpi-card.kpi-primary .kpi-value .amount[data-v-16dc1b35],.dashboard-pro .kpi-card.kpi-primary .kpi-value .currency[data-v-16dc1b35],.dashboard-pro .kpi-card.kpi-primary .kpi-value .unit[data-v-16dc1b35]{color:#fff}.dashboard-pro .kpi-card.kpi-primary .kpi-sub[data-v-16dc1b35]{color:hsla(0,0%,100%,.7)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-16dc1b35]{position:absolute;right:12px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:60px;height:60px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg[data-v-16dc1b35]{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-bg[data-v-16dc1b35]{fill:none;stroke:rgba(16,185,129,.15);stroke-width:3}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring svg .ring-progress[data-v-16dc1b35]{fill:none;stroke:#10b981;stroke-width:3;stroke-linecap:round;-webkit-transition:stroke-dasharray .5s ease;transition:stroke-dasharray .5s ease}.dashboard-pro .kpi-card.kpi-win-rate .kpi-icon[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .kpi-card.kpi-profit-factor .kpi-icon[data-v-16dc1b35]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .kpi-card.kpi-drawdown .kpi-icon[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .kpi-card.kpi-drawdown .kpi-value .amount[data-v-16dc1b35]{color:#ef4444}.dashboard-pro .kpi-card.kpi-trades .kpi-icon[data-v-16dc1b35]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .kpi-card.kpi-strategies .kpi-icon[data-v-16dc1b35]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .chart-row[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .chart-row[data-v-16dc1b35]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .chart-panel[data-v-16dc1b35]{background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .chart-panel.chart-main[data-v-16dc1b35]{-webkit-box-flex:2;-ms-flex:2;flex:2}.dashboard-pro .chart-panel.chart-side[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:300px}.dashboard-pro .chart-panel.chart-half[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1}.dashboard-pro .chart-panel .panel-header[data-v-16dc1b35]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .chart-panel .panel-header[data-v-16dc1b35],.dashboard-pro .chart-panel .panel-title[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .chart-panel .panel-title[data-v-16dc1b35]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .chart-panel .panel-title .anticon[data-v-16dc1b35]{color:#3b82f6}.dashboard-pro .chart-panel .panel-legend[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;font-size:12px;color:#64748b}.dashboard-pro .chart-panel .panel-legend .legend-item[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot[data-v-16dc1b35]{width:10px;height:10px;border-radius:2px}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.bar[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,left bottom,from(#34d399),to(#10b981));background:linear-gradient(180deg,#34d399,#10b981)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.line[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,right top,from(#3b82f6),to(#8b5cf6));background:linear-gradient(90deg,#3b82f6,#8b5cf6)}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.loss[data-v-16dc1b35]{background:#ef4444}.dashboard-pro .chart-panel .panel-legend .legend-item .dot.profit[data-v-16dc1b35]{background:#10b981}.dashboard-pro .chart-panel .panel-legend.calendar-legend[data-v-16dc1b35]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.dashboard-pro .chart-panel .panel-legend.calendar-legend .legend-gradient[data-v-16dc1b35]{width:80px;height:10px;border-radius:3px;background:-webkit-gradient(linear,left top,right top,from(#ef4444),color-stop(#fca5a5),color-stop(#f4f4f5),color-stop(#86efac),to(#22c55e));background:linear-gradient(90deg,#ef4444,#fca5a5,#f4f4f5,#86efac,#22c55e)}.dashboard-pro .chart-panel .panel-badge[data-v-16dc1b35]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .chart-panel .chart-body[data-v-16dc1b35]{height:320px;padding:16px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-16dc1b35]{height:220px}.dashboard-pro .chart-panel .chart-body.calendar-chart[data-v-16dc1b35]{height:280px}.dashboard-pro .chart-panel .calendar-nav[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.dashboard-pro .chart-panel .calendar-nav .current-month[data-v-16dc1b35]{font-size:14px;font-weight:600;color:#1e293b;min-width:80px;text-align:center}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-16dc1b35]{padding:0;height:auto;color:#64748b}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-16dc1b35]:hover:not(:disabled){color:#3b82f6}.dashboard-pro .chart-panel .calendar-nav .ant-btn-link[data-v-16dc1b35]:disabled{opacity:.3}.dashboard-pro .chart-panel .profit-calendar[data-v-16dc1b35]{padding:12px 16px;overflow:hidden}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-16dc1b35],.dashboard-pro .chart-panel .profit-calendar[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.dashboard-pro .chart-panel .profit-calendar .calendar-empty[data-v-16dc1b35]{height:280px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#64748b}.dashboard-pro .chart-panel .profit-calendar .calendar-empty .anticon[data-v-16dc1b35]{font-size:40px;margin-bottom:10px;opacity:.3}.dashboard-pro .chart-panel .profit-calendar .month-summary[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:20px;margin-bottom:10px;padding:8px 12px;background:rgba(241,245,249,.5);border-radius:8px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:2px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-label[data-v-16dc1b35]{font-size:10px;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value[data-v-16dc1b35]{font-size:15px;font-weight:700;font-family:JetBrains Mono,monospace}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.positive[data-v-16dc1b35]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .month-summary .summary-item .summary-value.negative[data-v-16dc1b35]{color:#ef4444}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:4px}.dashboard-pro .chart-panel .profit-calendar .calendar-weekdays .weekday[data-v-16dc1b35]{text-align:center;font-size:10px;font-weight:600;color:#64748b;padding:4px 0}.dashboard-pro .chart-panel .profit-calendar .calendar-grid[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(7,1fr);gap:3px}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell[data-v-16dc1b35]{height:36px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:6px;background:rgba(241,245,249,.5);border:1px solid transparent;-webkit-transition:all .2s ease;transition:all .2s ease;position:relative}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.empty[data-v-16dc1b35]{background:transparent;border:none}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.no-data[data-v-16dc1b35]{background:rgba(241,245,249,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(34,197,94,.12),rgba(34,197,94,.2));border-color:rgba(34,197,94,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.profit[data-v-16dc1b35]:hover{background:linear-gradient(135deg,rgba(34,197,94,.2),rgba(34,197,94,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(34,197,94,.2);box-shadow:0 4px 12px rgba(34,197,94,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-16dc1b35]{background:linear-gradient(135deg,rgba(239,68,68,.12),rgba(239,68,68,.2));border-color:rgba(239,68,68,.3)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.loss[data-v-16dc1b35]:hover{background:linear-gradient(135deg,rgba(239,68,68,.2),rgba(239,68,68,.3));-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(239,68,68,.2);box-shadow:0 4px 12px rgba(239,68,68,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell.zero[data-v-16dc1b35]{background:hsla(240,5%,65%,.1);border-color:hsla(240,5%,65%,.2)}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-number[data-v-16dc1b35]{font-size:11px;font-weight:600;color:#1e293b;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit[data-v-16dc1b35]{font-size:9px;font-weight:600;font-family:JetBrains Mono,monospace;margin-top:1px;line-height:1}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.positive[data-v-16dc1b35]{color:#10b981}.dashboard-pro .chart-panel .profit-calendar .calendar-grid .calendar-cell .day-profit.negative[data-v-16dc1b35]{color:#ef4444}.dashboard-pro .strategy-ranking[data-v-16dc1b35]{padding:16px}.dashboard-pro .strategy-ranking .empty-state[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:40px;color:#64748b}.dashboard-pro .strategy-ranking .empty-state .anticon[data-v-16dc1b35]{font-size:40px;margin-bottom:12px;opacity:.3}.dashboard-pro .strategy-ranking .ranking-grid[data-v-16dc1b35]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}.dashboard-pro .strategy-ranking .ranking-card[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:14px 16px;background:rgba(241,245,249,.5);border:1px solid #e2e8f0;border-radius:12px;position:relative;overflow:hidden}.dashboard-pro .strategy-ranking .ranking-card.rank-top[data-v-16dc1b35]{border-color:transparent;background:linear-gradient(135deg,rgba(59,130,246,.08),rgba(139,92,246,.08))}.dashboard-pro .strategy-ranking .ranking-card .rank-badge[data-v-16dc1b35]{width:28px;height:28px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:8px;font-size:12px;font-weight:700;background:#64748b;color:#fff;-ms-flex-negative:0;flex-shrink:0}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-1[data-v-16dc1b35]{background:linear-gradient(135deg,#fbbf24,#f59e0b)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-2[data-v-16dc1b35]{background:linear-gradient(135deg,#9ca3af,#6b7280)}.dashboard-pro .strategy-ranking .ranking-card .rank-badge.rank-3[data-v-16dc1b35]{background:linear-gradient(135deg,#cd7f32,#b87333)}.dashboard-pro .strategy-ranking .ranking-card .rank-info[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-name[data-v-16dc1b35]{font-size:13px;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-ms-flex-wrap:wrap;flex-wrap:wrap}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat[data-v-16dc1b35]{font-size:11px}.dashboard-pro .strategy-ranking .ranking-card .rank-info .rank-stats .stat label[data-v-16dc1b35]{color:#64748b;margin-right:4px}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar[data-v-16dc1b35]{position:absolute;bottom:0;left:0;right:0;height:3px;background:rgba(0,0,0,.05)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill[data-v-16dc1b35]{height:100%;border-radius:0 3px 3px 0;-webkit-transition:width .5s ease;transition:width .5s ease}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.positive[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,right top,from(#10b981),to(#34d399));background:linear-gradient(90deg,#10b981,#34d399)}.dashboard-pro .strategy-ranking .ranking-card .rank-pnl-bar .bar-fill.negative[data-v-16dc1b35]{background:-webkit-gradient(linear,left top,right top,from(#ef4444),to(#f87171));background:linear-gradient(90deg,#ef4444,#f87171)}.dashboard-pro .table-row[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin-bottom:16px}@media (max-width:1024px){.dashboard-pro .table-row[data-v-16dc1b35]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}}.dashboard-pro .table-panel[data-v-16dc1b35]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border:1px solid #e2e8f0;border-radius:16px;overflow:hidden}.dashboard-pro .table-panel .panel-header[data-v-16dc1b35]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px;border-bottom:1px solid #e2e8f0}.dashboard-pro .table-panel .panel-header[data-v-16dc1b35],.dashboard-pro .table-panel .panel-title[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.dashboard-pro .table-panel .panel-title[data-v-16dc1b35]{gap:8px;font-size:14px;font-weight:600;color:#1e293b}.dashboard-pro .table-panel .panel-title .anticon[data-v-16dc1b35]{color:#3b82f6}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-16dc1b35]{margin-left:8px;font-size:16px;cursor:pointer;color:#10b981;-webkit-transition:all .2s;transition:all .2s}.dashboard-pro .table-panel .panel-title .sound-toggle[data-v-16dc1b35]:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.dashboard-pro .table-panel .panel-title .sound-toggle.sound-off[data-v-16dc1b35]{color:#64748b}.dashboard-pro .table-panel .panel-badge[data-v-16dc1b35]{background:#3b82f6;color:#fff;font-size:11px;font-weight:600;padding:2px 8px;border-radius:10px}.dashboard-pro .orders-panel[data-v-16dc1b35]{margin-bottom:20px}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table{font-size:13px}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table-thead>tr>th{background:rgba(241,245,249,.8);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:#64748b;border-bottom:1px solid #e2e8f0;padding:12px 16px}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table-tbody>tr>td{padding:12px 16px;border-bottom:1px solid #e2e8f0}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-table-tbody>tr:hover>td{background:rgba(59,130,246,.04)}.dashboard-pro .pro-table[data-v-16dc1b35] .ant-pagination{padding:12px 16px;margin:0}.dashboard-pro .symbol-cell .symbol-name[data-v-16dc1b35]{font-weight:600;display:block}.dashboard-pro .symbol-cell .symbol-strategy[data-v-16dc1b35]{font-size:11px;color:#64748b}.dashboard-pro .side-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .side-tag.long[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .side-tag.short[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .type-tag.long[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .type-tag.short[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .type-tag.close-long[data-v-16dc1b35]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .type-tag.close-short[data-v-16dc1b35]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .symbol-tag[data-v-16dc1b35]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .exchange-tag[data-v-16dc1b35],.dashboard-pro .symbol-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .exchange-tag.binance[data-v-16dc1b35]{background:rgba(240,185,11,.1);color:#f0b90b}.dashboard-pro .exchange-tag.okx[data-v-16dc1b35]{background:rgba(139,92,246,.1);color:#8b5cf6}.dashboard-pro .exchange-tag.bitget[data-v-16dc1b35]{background:rgba(6,182,212,.1);color:#06b6d4}.dashboard-pro .exchange-tag.signal[data-v-16dc1b35]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .market-type[data-v-16dc1b35]{font-size:10px;color:#64748b;margin-top:2px}.dashboard-pro .status-tag[data-v-16dc1b35]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:600}.dashboard-pro .status-tag.pending[data-v-16dc1b35]{background:rgba(245,158,11,.1);color:#f59e0b}.dashboard-pro .status-tag.processing[data-v-16dc1b35]{background:rgba(59,130,246,.1);color:#3b82f6}.dashboard-pro .status-tag.completed[data-v-16dc1b35]{background:rgba(16,185,129,.1);color:#10b981}.dashboard-pro .status-tag.failed[data-v-16dc1b35]{background:rgba(239,68,68,.1);color:#ef4444}.dashboard-pro .status-tag.cancelled[data-v-16dc1b35]{background:rgba(100,116,139,.1);color:#64748b}.dashboard-pro .error-hint[data-v-16dc1b35]{font-size:11px;color:#ef4444;margin-top:4px;cursor:pointer}.dashboard-pro .error-hint .anticon[data-v-16dc1b35]{margin-right:4px}.dashboard-pro .notify-icons[data-v-16dc1b35]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.dashboard-pro .notify-icons .notify-icon[data-v-16dc1b35]{color:#64748b;font-size:14px}.dashboard-pro .pnl-cell[data-v-16dc1b35]{text-align:right}.dashboard-pro .pnl-cell .pnl-percent[data-v-16dc1b35]{display:block;font-size:11px}.dashboard-pro .time-cell[data-v-16dc1b35]{font-size:12px;color:#64748b}.dashboard-pro .sub-text[data-v-16dc1b35]{font-size:11px;color:#64748b}.dashboard-pro .text-muted[data-v-16dc1b35]{color:#64748b}.dashboard-pro .positive[data-v-16dc1b35]{color:#10b981}.dashboard-pro .negative[data-v-16dc1b35]{color:#ef4444}@media (max-width:768px){.dashboard-pro[data-v-16dc1b35]{padding:12px}.dashboard-pro .kpi-grid[data-v-16dc1b35]{grid-template-columns:repeat(2,1fr);gap:10px}.dashboard-pro .kpi-card[data-v-16dc1b35]{padding:14px}.dashboard-pro .kpi-card .kpi-value .amount[data-v-16dc1b35]{font-size:22px}.dashboard-pro .kpi-card.kpi-win-rate .kpi-ring[data-v-16dc1b35]{width:48px;height:48px;right:8px}.dashboard-pro .chart-panel .chart-body[data-v-16dc1b35]{height:260px;padding:12px}.dashboard-pro .chart-panel .chart-body.chart-sm[data-v-16dc1b35]{height:180px}.dashboard-pro .ranking-grid[data-v-16dc1b35]{grid-template-columns:1fr}} \ No newline at end of file diff --git a/frontend/dist/css/447.1113ae8a.css b/frontend/dist/css/447.1113ae8a.css deleted file mode 100644 index 3433139..0000000 --- a/frontend/dist/css/447.1113ae8a.css +++ /dev/null @@ -1 +0,0 @@ -.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-comment.cm-attribute{color:#97b757}.cm-s-monokai span.cm-comment.cm-def{color:#bc9262}.cm-s-monokai span.cm-comment.cm-tag{color:#bc6283}.cm-s-monokai span.cm-comment.cm-type{color:#5998a6}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-eclipse span.cm-meta{color:#ff1717}.cm-s-eclipse span.cm-keyword{line-height:1em;font-weight:700;color:#7f0055}.cm-s-eclipse span.cm-atom{color:#219}.cm-s-eclipse span.cm-number{color:#164}.cm-s-eclipse span.cm-def{color:#00f}.cm-s-eclipse span.cm-variable{color:#000}.cm-s-eclipse span.cm-type,.cm-s-eclipse span.cm-variable-2,.cm-s-eclipse span.cm-variable-3{color:#0000c0}.cm-s-eclipse span.cm-operator,.cm-s-eclipse span.cm-property{color:#000}.cm-s-eclipse span.cm-comment{color:#3f7f5f}.cm-s-eclipse span.cm-string{color:#2a00ff}.cm-s-eclipse span.cm-string-2{color:#f50}.cm-s-eclipse span.cm-qualifier{color:#555}.cm-s-eclipse span.cm-builtin{color:#30a}.cm-s-eclipse span.cm-bracket{color:#cc7}.cm-s-eclipse span.cm-tag{color:#170}.cm-s-eclipse span.cm-attribute{color:#00c}.cm-s-eclipse span.cm-link{color:#219}.cm-s-eclipse span.cm-error{color:red}.cm-s-eclipse .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-eclipse .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}[data-v-4fea1865] .ant-modal{top:20px!important}.visual-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;background:#fafafa;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:500px;overflow:hidden}.visual-modules-list[data-v-4fea1865]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px}.empty-visual-state[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;color:#999}.visual-module-card[data-v-4fea1865]{background:#fff;border:1px solid #e8e8e8;border-radius:4px;margin-bottom:12px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.visual-module-card .module-header[data-v-4fea1865]{padding:8px 12px;border-bottom:1px solid #f0f0f0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;background:#f9f9f9}.visual-module-card .module-header .module-title[data-v-4fea1865],.visual-module-card .module-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.visual-module-card .module-header .module-title[data-v-4fea1865]{font-weight:500;gap:8px}.visual-module-card .module-header .remove-icon[data-v-4fea1865]{cursor:pointer;color:#999}.visual-module-card .module-header .remove-icon[data-v-4fea1865]:hover{color:#ff4d4f}.visual-module-card .module-body[data-v-4fea1865]{padding:12px}.visual-module-card .style-config[data-v-4fea1865]{margin-top:12px;padding-top:12px;border-top:1px dashed #f0f0f0}.visual-module-card .style-config .label[data-v-4fea1865]{margin-right:8px;color:#666}.add-module-bar[data-v-4fea1865]{padding:12px;background:#fff;border-top:1px solid #e8e8e8}@media (max-width:768px){.visual-editor-container[data-v-4fea1865]{height:auto;min-height:400px}}.ant-form-item[data-v-4fea1865]{margin-bottom:16px}.editor-content[data-v-4fea1865]{padding:24px;background:#fff;min-height:500px;max-height:82vh;overflow-y:auto}.editor-layout[data-v-4fea1865]{min-height:450px}.code-editor-column[data-v-4fea1865]{height:100%}.code-editor-column[data-v-4fea1865],.code-section[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.code-section[data-v-4fea1865]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:12px;padding-bottom:12px;border-bottom:2px solid #f0f0f0}.code-section .section-header .section-title[data-v-4fea1865],.code-section .section-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.code-section .section-header .section-title[data-v-4fea1865]{font-weight:600;font-size:14px;color:#262626;gap:8px}.code-section .section-header .section-title[data-v-4fea1865]:before{content:"";display:inline-block;width:4px;height:14px;background:#1890ff;border-radius:2px}.code-section .section-header .section-actions[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link{color:#1890ff;padding:0 8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link:hover{color:#40a9ff}.code-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;overflow:hidden;height:62vh;min-height:520px;max-height:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05);box-shadow:inset 0 1px 3px rgba(0,0,0,.05);-webkit-transition:all .3s ease;transition:all .3s ease}.code-editor-container[data-v-4fea1865]:hover{border-color:#40a9ff}.code-editor-container[data-v-4fea1865]:focus-within{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05);box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05)}.code-editor-container[data-v-4fea1865] .CodeMirror{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;font-family:Courier New,Consolas,Liberation Mono,Menlo,monospace;font-size:13px;line-height:1.6;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fafafa}.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{-webkit-box-flex:1;-ms-flex:1;flex:1;min-height:100%;max-height:none;overflow-y:auto;overflow-x:auto}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:100%!important;padding-left:12px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-gutters{border-right:1px solid #e8e8e8;background:-webkit-gradient(linear,left top,right top,from(#fafafa),to(#f5f5f5));background:linear-gradient(90deg,#fafafa 0,#f5f5f5);width:45px;padding-right:4px}.code-editor-container[data-v-4fea1865] .CodeMirror-linenumber{padding:0 8px 0 4px;min-width:30px;text-align:right;color:#999;font-size:12px}.code-editor-container[data-v-4fea1865] .CodeMirror-lines{padding:12px 8px;background:#fff}.code-editor-container[data-v-4fea1865] .CodeMirror-line{padding-left:0}.code-editor-container[data-v-4fea1865] .CodeMirror-cursor{border-left:2px solid #1890ff}.code-editor-container[data-v-4fea1865] .CodeMirror-selected{background:#e6f7ff}.code-mode-split[data-v-4fea1865]{width:100%}.ai-pane[data-v-4fea1865],.ai-panel[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ai-panel[data-v-4fea1865]{border:1px solid #e8e8e8;border-radius:6px;background:#fafafa;padding:12px;height:62vh;min-height:520px}.ai-panel-title[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:10px;color:#262626}.ai-panel-hint[data-v-4fea1865]{margin-top:10px;color:#8c8c8c;font-size:12px;line-height:1.5}.ai-panel[data-v-4fea1865] textarea.ant-input{-webkit-box-flex:1;-ms-flex:1;flex:1;resize:none}.editor-footer[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px}.editor-footer[data-v-4fea1865] .ant-btn{height:36px;padding:0 20px;font-weight:500;border-radius:4px;-webkit-transition:all .3s ease;transition:all .3s ease}.editor-footer[data-v-4fea1865] .ant-btn:not(.ant-btn-primary):hover{border-color:#40a9ff;color:#40a9ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 8px rgba(24,144,255,.2);box-shadow:0 2px 8px rgba(24,144,255,.2)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary{-webkit-box-shadow:0 2px 4px rgba(24,144,255,.3);box-shadow:0 2px 4px rgba(24,144,255,.3)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary:hover{-webkit-box-shadow:0 4px 12px rgba(24,144,255,.4);box-shadow:0 4px 12px rgba(24,144,255,.4);-webkit-transform:translateY(-1px);transform:translateY(-1px)}@media (max-width:768px){.indicator-editor-modal[data-v-4fea1865] .ant-modal{width:100%!important;max-width:100%!important;margin:0!important;top:0!important;padding-bottom:0!important;max-height:100vh!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-content{height:100vh!important;max-height:100vh!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:0!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-header{-ms-flex-negative:0;flex-shrink:0;padding:16px;border-bottom:1px solid #e8e8e8}.indicator-editor-modal[data-v-4fea1865] .ant-modal-body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:0!important;min-height:0}.indicator-editor-modal[data-v-4fea1865] .ant-modal-footer{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;border-top:1px solid #e8e8e8}.editor-content[data-v-4fea1865]{padding:16px!important;min-height:auto!important;max-height:none!important;overflow-y:visible!important}.editor-layout[data-v-4fea1865]{min-height:auto!important}.code-editor-column[data-v-4fea1865]{width:100%!important;margin-bottom:16px}.code-section[data-v-4fea1865]{margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{padding-bottom:8px;margin-bottom:8px}.code-section .section-header .section-title[data-v-4fea1865]{font-size:13px}.code-editor-container[data-v-4fea1865]{height:250px!important}.code-editor-container[data-v-4fea1865],.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{min-height:250px!important;max-height:250px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:250px!important}.ai-panel[data-v-4fea1865]{height:auto!important;min-height:auto!important}.editor-footer[data-v-4fea1865]{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;gap:8px;padding:0}.editor-footer[data-v-4fea1865] .ant-btn{width:100%;height:40px;margin:0}}.chart-left[data-v-5f0b12e1]{width:70%!important;-webkit-box-flex:0!important;-ms-flex:0 0 70%!important;flex:0 0 70%!important;position:relative;border-right:1px solid #e8e8e8;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}.chart-left.theme-dark[data-v-5f0b12e1]{background:#131722;border-right-color:#2a2e39}.chart-wrapper[data-v-5f0b12e1]{width:100%;height:100%;position:relative;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;display:-webkit-box;display:-ms-flexbox;display:flex}.theme-dark .chart-wrapper[data-v-5f0b12e1]{background:#131722}.drawing-toolbar[data-v-5f0b12e1]{-ms-flex-negative:0;flex-shrink:0;width:40px;background:#fff;border-right:1px solid #e8e8e8;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 4px;gap:4px;z-index:10;overflow-y:auto;overflow-x:hidden}.chart-left.theme-dark .drawing-toolbar[data-v-5f0b12e1]{background:#131722;border-right-color:#2a2e39}.drawing-tool-btn[data-v-5f0b12e1]{width:32px;height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;border-radius:4px;-webkit-transition:all .2s;transition:all .2s;color:#666;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .drawing-tool-btn[data-v-5f0b12e1]{color:#d1d4dc}.drawing-tool-btn[data-v-5f0b12e1]:hover{background:#f0f2f5;color:#1890ff}.chart-left.theme-dark .drawing-tool-btn[data-v-5f0b12e1]:hover{background:#1f2943;color:#13c2c2}.drawing-tool-btn.active[data-v-5f0b12e1]{background:#e6f7ff;color:#1890ff;border:1px solid #1890ff}.chart-left.theme-dark .drawing-tool-btn.active[data-v-5f0b12e1]{background:#1f2943;color:#13c2c2;border-color:#13c2c2}.drawing-toolbar .ant-divider-vertical[data-v-5f0b12e1]{margin:8px 0;height:20px}.indicator-toolbar[data-v-5f0b12e1]{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 12px;background:#fff;border-bottom:1px solid #e8e8e8;-ms-flex-wrap:wrap;flex-wrap:wrap;z-index:1;position:relative;width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.indicator-toolbar[data-v-5f0b12e1]::-webkit-scrollbar{display:none;width:0;height:0}.chart-content-area[data-v-5f0b12e1]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden}.chart-left.theme-dark .indicator-toolbar[data-v-5f0b12e1]{background:#131722;border-bottom-color:#2a2e39}.indicator-btn[data-v-5f0b12e1]{padding:4px 12px;font-size:12px;font-weight:600;color:#666;background:#f0f2f5;border:1px solid #e8e8e8;border-radius:4px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;min-width:40px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .indicator-btn[data-v-5f0b12e1]{color:#d1d4dc;background:#1f2943;border-color:#2a2e39}.indicator-btn[data-v-5f0b12e1]:hover{color:#1890ff;border-color:#1890ff;background:#f0f8ff}.chart-left.theme-dark .indicator-btn[data-v-5f0b12e1]:hover{color:#13c2c2;border-color:#13c2c2;background:#1f2943}.indicator-btn.active[data-v-5f0b12e1]{color:#1890ff;background:#fff;border-color:#1890ff;border-width:2px;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.1);box-shadow:0 0 0 2px rgba(24,144,255,.1)}.chart-left.theme-dark .indicator-btn.active[data-v-5f0b12e1]{color:#13c2c2;background:#1f2943;border-color:#13c2c2;-webkit-box-shadow:0 0 0 2px rgba(19,194,194,.2);box-shadow:0 0 0 2px rgba(19,194,194,.2)}.kline-chart-container[data-v-5f0b12e1]{-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;min-width:0;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;overflow:hidden}.theme-dark .kline-chart-container[data-v-5f0b12e1]{background:#131722}.chart-overlay[data-v-5f0b12e1]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.95);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;backdrop-filter:blur(2px)}.chart-left.theme-dark .chart-overlay[data-v-5f0b12e1]{background:rgba(19,23,34,.95)}.error-box[data-v-5f0b12e1]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333}.initial-hint[data-v-5f0b12e1]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .initial-hint[data-v-5f0b12e1]{background:rgba(19,23,34,.98)}.hint-box[data-v-5f0b12e1]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:400px;padding:20px}.pyodide-warning[data-v-5f0b12e1]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .pyodide-warning[data-v-5f0b12e1]{background:rgba(19,23,34,.98)}.warning-box[data-v-5f0b12e1]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:500px;padding:20px}.warning-title[data-v-5f0b12e1]{font-size:16px;font-weight:600;color:#faad14;margin-bottom:8px}.warning-desc[data-v-5f0b12e1]{font-size:14px;color:#666;line-height:1.6}.chart-left.theme-dark .warning-box[data-v-5f0b12e1]{color:#d1d4dc}.chart-left.theme-dark .warning-title[data-v-5f0b12e1]{color:#faad14}.chart-left.theme-dark .warning-desc[data-v-5f0b12e1]{color:#868993}.chart-left.theme-dark .hint-box[data-v-5f0b12e1]{color:#d1d4dc}.hint-title[data-v-5f0b12e1]{font-size:18px;font-weight:600;color:#333;margin-bottom:12px}.chart-left.theme-dark .hint-title[data-v-5f0b12e1]{color:#d1d4dc}.hint-desc[data-v-5f0b12e1]{font-size:14px;color:#999;line-height:1.6}.chart-left.theme-dark .hint-desc[data-v-5f0b12e1]{color:#787b86}.history-loading-hint[data-v-5f0b12e1]{position:absolute;left:20px;top:60px;z-index:1000!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 16px;background:hsla(0,0%,100%,.98)!important;border:1px solid #e8e8e8;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);font-size:14px;color:#666!important;backdrop-filter:blur(4px);pointer-events:none;visibility:visible!important;opacity:1!important}.chart-left.theme-dark .history-loading-hint[data-v-5f0b12e1]{background:rgba(19,23,34,.98)!important;border-color:#2a2e39;color:#d1d4dc!important}.loading-text[data-v-5f0b12e1]{white-space:nowrap;margin-left:4px}@media (max-width:768px){.drawing-toolbar[data-v-5f0b12e1]{display:none}.indicator-toolbar[data-v-5f0b12e1]{padding-left:12px;-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.indicator-toolbar[data-v-5f0b12e1]::-webkit-scrollbar{display:none;width:0;height:0}.indicator-btn[data-v-5f0b12e1]{-ms-flex-negative:0;flex-shrink:0}}@media (max-width:1200px){.drawing-toolbar[data-v-5f0b12e1]{display:none}.indicator-toolbar[data-v-5f0b12e1]{padding-left:12px}.kline-chart-container[data-v-5f0b12e1]{margin-left:0}.chart-left[data-v-5f0b12e1]{width:100%!important;min-width:100%!important;border-right:none;border-bottom:1px solid #e8e8e8;height:600px!important;min-height:600px!important}.chart-wrapper[data-v-5f0b12e1],.kline-chart-container[data-v-5f0b12e1]{height:100%!important;min-height:600px!important}}@media (max-width:992px){.chart-left[data-v-5f0b12e1]{height:650px!important;min-height:650px!important}.chart-wrapper[data-v-5f0b12e1],.kline-chart-container[data-v-5f0b12e1]{height:100%!important;min-height:650px!important}}@media (max-width:768px){.chart-left[data-v-5f0b12e1]{height:60vh!important;min-height:400px!important;max-height:80vh!important}.chart-wrapper[data-v-5f0b12e1]{height:100%!important;min-height:400px!important;max-height:100%!important}.kline-chart-container[data-v-5f0b12e1]{height:calc(100% - 45px)!important;min-height:350px!important;max-height:calc(100% - 45px)!important}}@media (max-width:576px){.chart-left[data-v-5f0b12e1]{height:55vh!important;min-height:350px!important;max-height:75vh!important}.chart-wrapper[data-v-5f0b12e1]{height:100%!important;min-height:350px!important;max-height:100%!important}.kline-chart-container[data-v-5f0b12e1]{height:calc(100% - 45px)!important;min-height:300px!important;max-height:calc(100% - 45px)!important}}[data-v-473e449c] .ant-form-item-label{white-space:normal;line-height:1.2}[data-v-473e449c] .ant-form-item-label>label{white-space:normal}[data-v-473e449c] .ant-form-item-control{min-width:0}.backtest-modal[data-v-473e449c] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.backtest-content[data-v-473e449c]{position:relative}.field-hint[data-v-473e449c]{margin-top:4px;font-size:12px;line-height:1.4;color:#8c8c8c}.section-title[data-v-473e449c]{font-size:15px;font-weight:600;color:#262626;margin-bottom:16px;padding-bottom:8px;border-bottom:2px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.section-title .anticon[data-v-473e449c]{color:#1890ff}.config-section[data-v-473e449c]{margin-bottom:24px}.precision-info[data-v-473e449c]{-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.date-quick-select[data-v-473e449c],.precision-info[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.date-quick-select[data-v-473e449c]{padding:8px 12px;background:#fafafa;border-radius:6px;border:1px solid #f0f0f0}.result-section[data-v-473e449c]{margin-top:24px}.metrics-cards[data-v-473e449c]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}@media (max-width:1200px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(4,1fr)}}@media (max-width:992px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(3,1fr)}}@media (max-width:576px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(2,1fr)}}.metric-card[data-v-473e449c]{background:#fafafa;border-radius:8px;padding:16px;text-align:center;-webkit-transition:all .3s;transition:all .3s}.metric-card[data-v-473e449c]:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.1);box-shadow:0 2px 8px rgba(0,0,0,.1)}.metric-card.positive[data-v-473e449c]{background:linear-gradient(135deg,#f6ffed,#d9f7be)}.metric-card.positive .metric-value[data-v-473e449c]{color:#52c41a}.metric-card.negative[data-v-473e449c]{background:linear-gradient(135deg,#fff2f0,#ffccc7)}.metric-card.negative .metric-value[data-v-473e449c]{color:#f5222d}.metric-card .metric-label[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.metric-card .metric-value[data-v-473e449c]{font-size:20px;font-weight:700;color:#262626}.metric-card .metric-amount[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-top:4px}.chart-section[data-v-473e449c]{margin-bottom:24px}.chart-title[data-v-473e449c]{font-size:14px;font-weight:600;color:#595959;margin-bottom:12px}.equity-chart[data-v-473e449c]{width:100%;height:300px;border:1px solid #f0f0f0;border-radius:8px}.trades-section[data-v-473e449c]{margin-top:24px}.loading-overlay[data-v-473e449c]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:100;border-radius:8px}.loading-overlay .loading-content[data-v-473e449c]{text-align:center}.loading-overlay .loading-animation[data-v-473e449c]{margin-bottom:20px}.loading-overlay .chart-bars[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;height:60px;gap:6px}.loading-overlay .bar[data-v-473e449c]{width:8px;background:-webkit-gradient(linear,left top,left bottom,from(#1890ff),to(#52c41a));background:linear-gradient(180deg,#1890ff,#52c41a);border-radius:4px;-webkit-animation:barPulse-473e449c 1.2s ease-in-out infinite;animation:barPulse-473e449c 1.2s ease-in-out infinite}.loading-overlay .bar1[data-v-473e449c]{height:20px;-webkit-animation-delay:0s;animation-delay:0s}.loading-overlay .bar2[data-v-473e449c]{height:35px;-webkit-animation-delay:.1s;animation-delay:.1s}.loading-overlay .bar3[data-v-473e449c]{height:50px;-webkit-animation-delay:.2s;animation-delay:.2s}.loading-overlay .bar4[data-v-473e449c]{height:35px;-webkit-animation-delay:.3s;animation-delay:.3s}.loading-overlay .bar5[data-v-473e449c]{height:20px;-webkit-animation-delay:.4s;animation-delay:.4s}@-webkit-keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}@keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}.loading-overlay .loading-text[data-v-473e449c]{font-size:16px;font-weight:500;color:#1890ff;margin-bottom:8px}.loading-overlay .loading-subtext[data-v-473e449c]{font-size:13px;color:#666;-webkit-animation:fadeInOut-473e449c 2s ease-in-out infinite;animation:fadeInOut-473e449c 2s ease-in-out infinite}@-webkit-keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}@keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}.backtest-run-viewer[data-v-a484239a] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.metrics-cards[data-v-a484239a]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.metric-card[data-v-a484239a]{background:#fff;border:1px solid #f0f0f0;border-radius:8px;padding:12px}.metric-card.positive[data-v-a484239a]{border-color:rgba(82,196,26,.35)}.metric-card.negative[data-v-a484239a]{border-color:rgba(245,34,45,.35)}.metric-label[data-v-a484239a]{color:#8c8c8c;font-size:12px}.metric-value[data-v-a484239a]{font-size:18px;font-weight:600;margin-top:4px}.metric-amount[data-v-a484239a]{color:#8c8c8c;font-size:12px;margin-top:4px}.chart-section[data-v-a484239a]{margin-top:8px}.chart-title[data-v-a484239a]{font-weight:600;margin:8px 0;color:#262626}.equity-chart[data-v-a484239a]{width:100%;height:280px}.trades-section[data-v-a484239a]{margin-top:16px}.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.chart-container[data-v-b17e86c2]{background:#f0f2f5;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.chart-container[data-v-b17e86c2],.chart-header[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;min-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-header[data-v-b17e86c2]{max-width:100%;background:#fff;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.02);box-shadow:0 2px 4px rgba(0,0,0,.02)}.header-top[data-v-b17e86c2]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;height:60px}.header-left[data-v-b17e86c2],.header-top[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.header-left[data-v-b17e86c2]{gap:20px}.symbol-select[data-v-b17e86c2]{width:220px}.symbol-select[data-v-b17e86c2] .ant-select-selection{background-color:#fff;border:1px solid #e8e8e8;color:#333;border-radius:4px;-webkit-box-shadow:none;box-shadow:none}.symbol-select[data-v-b17e86c2] .ant-select-selection:hover{border-color:#1890ff}.symbol-select[data-v-b17e86c2] .ant-select-focused .ant-select-selection{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.symbol-select[data-v-b17e86c2] .ant-select-arrow,.symbol-select[data-v-b17e86c2] .ant-select-selection__placeholder{color:#999}.timeframe-group[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f0f2f5;border-radius:4px;padding:2px}.timeframe-item[data-v-b17e86c2]{padding:4px 12px;font-size:13px;font-weight:600;color:#666;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-radius:4px}.timeframe-item[data-v-b17e86c2]:hover{color:#1890ff;background:#fff}.timeframe-item.active[data-v-b17e86c2]{color:#1890ff;background:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.current-symbol[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:24px}.symbol-info[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.symbol-label[data-v-b17e86c2]{font-size:16px;font-weight:700;color:#333;line-height:1.2}.market-tag[data-v-b17e86c2]{font-size:10px;color:#666;background:#f0f2f5;padding:1px 4px;border-radius:2px;margin-top:2px}.price-info[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.price-info.color-up[data-v-b17e86c2]{color:#0ecb81}.price-info.color-down[data-v-b17e86c2]{color:#f6465d}.symbol-price[data-v-b17e86c2]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace;line-height:1.2}.symbol-change[data-v-b17e86c2]{font-size:12px}.mobile-symbol-price[data-v-b17e86c2]{display:none}.panel-header .theme-switcher[data-v-b17e86c2]{margin-left:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.panel-header .realtime-toggle-btn[data-v-b17e86c2],.panel-header .theme-toggle-btn[data-v-b17e86c2]{color:#666;border:none;padding:4px 8px;-webkit-transition:all .3s;transition:all .3s;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:4px;min-width:32px;height:32px}.panel-header .realtime-toggle-btn[data-v-b17e86c2]:hover,.panel-header .theme-toggle-btn[data-v-b17e86c2]:hover{color:#1890ff;background:#f0f2f5}.panel-header .realtime-toggle-btn.active[data-v-b17e86c2],.panel-header .theme-toggle-btn.active[data-v-b17e86c2]{color:#1890ff;background:#e6f7ff}.panel-header .realtime-toggle-btn .anticon[data-v-b17e86c2],.panel-header .theme-toggle-btn .anticon[data-v-b17e86c2]{font-size:16px}.chart-content[data-v-b17e86c2]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:100%;max-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-content[data-v-b17e86c2],.chart-main-row[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;width:100%}.chart-main-row[data-v-b17e86c2]{height:80vh!important;min-height:500px!important;max-height:80vh!important;-ms-flex-negative:0;flex-shrink:0}.chart-right[data-v-b17e86c2]{width:30%!important;-webkit-box-flex:0!important;-ms-flex:0 0 30%!important;flex:0 0 30%!important;border-left:1px solid #e8e8e8}.chart-right[data-v-b17e86c2],.indicators-panel[data-v-b17e86c2]{background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicators-panel[data-v-b17e86c2]{height:100%}.panel-header[data-v-b17e86c2]{height:48px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;border-bottom:1px solid #e8e8e8;font-weight:600;color:#333;background:#fff}.panel-header .mobile-header-create-btn[data-v-b17e86c2]{margin-right:0}.panel-body[data-v-b17e86c2]{padding:0;overflow:hidden}.indicator-section[data-v-b17e86c2],.panel-body[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicator-section[data-v-b17e86c2]{min-height:0;border-bottom:1px solid #e8e8e8}.indicator-section[data-v-b17e86c2]:last-child{border-bottom:none}.indicator-section.section-empty[data-v-b17e86c2]{min-height:200px}.section-label[data-v-b17e86c2]{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;background:#fafafa;border-bottom:1px solid #e8e8e8;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.section-label .section-label-left[data-v-b17e86c2],.section-label[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.section-label .section-label-left[data-v-b17e86c2]{gap:8px;-webkit-box-flex:1;-ms-flex:1;flex:1}.section-label .section-label-left .collapse-icon[data-v-b17e86c2]{font-size:12px;color:#999;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.section-label .section-label-left span[data-v-b17e86c2]{font-weight:500}.section-label .buy-indicator-btn[data-v-b17e86c2]{padding:0;height:auto;margin-left:8px}.create-indicator-btn[data-v-b17e86c2]{margin-left:auto;margin-right:0}@media (max-width:768px){.create-indicator-btn[data-v-b17e86c2]{display:none!important}}.section-content[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px 16px;min-height:0}.indicator-card[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;padding:10px 12px;border-radius:6px;margin-bottom:8px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:1px solid #e8e8e8}.indicator-card[data-v-b17e86c2]:hover{background:#f0f2f5;border-color:#1890ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.05);box-shadow:0 2px 4px rgba(0,0,0,.05)}.indicator-card.active[data-v-b17e86c2]{background:#e6f7ff;border-color:#1890ff}.indicator-card.active .card-name[data-v-b17e86c2]{color:#1890ff}.indicator-card.indicator-active[data-v-b17e86c2]{border-color:#52c41a;border-width:2px;background:#f6ffed}.indicator-card.indicator-active[data-v-b17e86c2]:hover{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.2);box-shadow:0 2px 8px rgba(82,196,26,.2)}.indicator-card.indicator-active .card-name[data-v-b17e86c2]{color:#52c41a}.indicator-card.disabled[data-v-b17e86c2]{opacity:.5;cursor:not-allowed}.indicator-card.disabled[data-v-b17e86c2]:hover{-webkit-transform:none;transform:none;background:#fff;border-color:#e8e8e8;-webkit-box-shadow:none;box-shadow:none}.card-content[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.card-header[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:4px}.card-name[data-v-b17e86c2]{font-size:13px;color:#333;font-weight:500;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-right:8px}.card-params[data-v-b17e86c2]{font-size:11px;color:#999;margin-top:2px}.card-desc[data-v-b17e86c2]{font-size:11px;color:#999;margin-top:0;display:-webkit-box;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.4;min-height:1.4em;max-height:2.8em}.card-action[data-v-b17e86c2]{color:#999;font-size:12px}.card-action[data-v-b17e86c2]:hover{color:#1890ff}.card-actions[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;-ms-flex-negative:0;flex-shrink:0}.action-icon[data-v-b17e86c2]{font-size:16px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;color:#999}.action-icon.edit-icon[data-v-b17e86c2]{color:#1890ff}.action-icon.edit-icon[data-v-b17e86c2]:hover{color:#40a9ff}.action-icon.delete-icon[data-v-b17e86c2]{color:#ff4d4f}.action-icon.delete-icon[data-v-b17e86c2]:hover{color:#ff7875}.action-icon[data-v-b17e86c2]:hover{color:#1890ff}.action-icon.toggle-icon.active[data-v-b17e86c2]{color:#52c41a}.action-icon.backtest-icon[data-v-b17e86c2]{color:#722ed1}.action-icon.backtest-icon[data-v-b17e86c2]:hover{color:#9254de}.action-icon.backtest-history-icon[data-v-b17e86c2]{color:#13c2c2}.action-icon.backtest-history-icon[data-v-b17e86c2]:hover{color:#08979c}.action-icon.publish-icon[data-v-b17e86c2]{color:#1890ff}.action-icon.publish-icon[data-v-b17e86c2]:hover{color:#40a9ff}.action-icon.publish-icon.published[data-v-b17e86c2]{color:#52c41a}.action-icon.publish-icon.published[data-v-b17e86c2]:hover{color:#73d13d}.action-icon.status-icon.status-normal[data-v-b17e86c2]{color:#52c41a}.action-icon.status-icon.status-expired[data-v-b17e86c2]{color:#ff4d4f}.action-icon.expiry-icon[data-v-b17e86c2]{color:#1890ff}.empty-indicators[data-v-b17e86c2]{padding:40px 20px;gap:8px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.empty-indicators[data-v-b17e86c2],.loading-indicators[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#999;font-size:13px}.loading-indicators[data-v-b17e86c2]{padding:20px}.custom-scrollbar[data-v-b17e86c2]{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar[data-v-b17e86c2]::-webkit-scrollbar{display:none;width:0;height:0}.dark-dropdown{background-color:#fff;border:1px solid #e8e8e8;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.dark-dropdown .ant-select-dropdown-menu-item{color:#333}.dark-dropdown .ant-select-dropdown-menu-item:hover{background-color:#f0f2f5}.dark-dropdown .ant-select-dropdown-menu-item-active{background-color:#e6f7ff;color:#1890ff}.dark-dropdown .ant-empty-description{color:#999}.symbol-option[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.symbol-option .symbol-name[data-v-b17e86c2]{font-weight:600;color:#8f8d8d;margin-right:8px}.symbol-option .symbol-name-extra[data-v-b17e86c2]{font-size:12px;color:#999;margin-left:4px}.empty-watchlist-hint[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#666;font-size:12px}@media (max-width:768px){.chart-container[data-v-b17e86c2]{padding:0;width:calc(100% + 44px)!important;margin:-22px}.chart-header[data-v-b17e86c2]{padding:12px}.chart-header .header-top[data-v-b17e86c2],.chart-header[data-v-b17e86c2]{gap:12px;height:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-header .header-top[data-v-b17e86c2]{padding:0}.chart-header .header-left[data-v-b17e86c2]{width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.chart-header .search-section[data-v-b17e86c2]{width:100%}.chart-header .search-section .symbol-select[data-v-b17e86c2]{width:100%!important}.chart-header .timeframe-group[data-v-b17e86c2]{width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.chart-header .timeframe-group .timeframe-item[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:calc(14.28% - 4px);text-align:center;padding:6px 8px;font-size:12px}.chart-header .current-symbol[data-v-b17e86c2]{display:none}.chart-content[data-v-b17e86c2]{overflow-y:auto}.chart-content[data-v-b17e86c2],.chart-main-row[data-v-b17e86c2]{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important;height:auto!important;min-height:auto!important;max-height:none!important}.mobile-symbol-price[data-v-b17e86c2]{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 16px;background:#fff;width:100%}.mobile-symbol-price .mobile-price-info[data-v-b17e86c2],.mobile-symbol-price[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mobile-symbol-price .mobile-price-info[data-v-b17e86c2]{gap:12px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.mobile-symbol-price .mobile-price-info.color-up[data-v-b17e86c2]{color:#0ecb81}.mobile-symbol-price .mobile-price-info.color-down[data-v-b17e86c2]{color:#f6465d}.mobile-symbol-price .mobile-price-info .mobile-symbol-price[data-v-b17e86c2]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace}.mobile-symbol-price .mobile-price-info .mobile-symbol-change[data-v-b17e86c2]{font-size:14px;font-weight:500}kline-chart[data-v-b17e86c2]{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important;width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;display:block!important;margin-bottom:0!important}kline-chart[data-v-b17e86c2] .chart-left{width:100%!important;height:350px!important;min-height:350px!important;max-height:350px!important;border-right:none!important;border-bottom:1px solid #e8e8e8!important}.chart-right[data-v-b17e86c2]{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;width:100%!important;min-width:100%!important;max-width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;height:auto!important;max-height:calc(100vh - 470px)!important;border-left:none!important;border-top:none!important;margin-top:0!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;visibility:visible!important;opacity:1!important}.chart-right .indicators-panel[data-v-b17e86c2]{height:auto!important;min-height:600px!important;max-height:calc(100vh - 410px)!important;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .panel-header[data-v-b17e86c2]{position:sticky;top:0;background:#fff;z-index:10;border-bottom:1px solid #e8e8e8;padding:12px;font-size:14px;-ms-flex-negative:0;flex-shrink:0}.chart-right .indicators-panel .panel-header .mobile-header-create-btn[data-v-b17e86c2]{margin-right:0;font-size:12px;height:28px;padding:0 12px}.chart-right .indicators-panel .panel-body[data-v-b17e86c2]{padding:0;overflow:visible;min-height:400px!important}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2],.chart-right .indicators-panel .panel-body[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2]{overflow:hidden;min-height:0;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-bar{margin-bottom:0;-ms-flex-negative:0;flex-shrink:0;border-bottom:1px solid #e8e8e8}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab{color:#666;font-size:14px}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab-active{color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-ink-bar{background-color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-content{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tabpane{height:100%;overflow:hidden;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tabpane-active{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;height:100%;overflow:hidden}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-b17e86c2],.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-content-holder{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-b17e86c2]{width:100%}.chart-right .indicators-panel .mobile-indicator-tabs .section-content[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto!important;overflow-x:hidden;padding:12px;min-height:0;height:100%;-webkit-overflow-scrolling:touch;position:relative}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-b17e86c2],.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn[data-v-b17e86c2]{display:none!important}.chart-right .indicators-panel .indicator-section .section-label[data-v-b17e86c2]{padding:10px 12px;font-size:13px}.chart-right .indicators-panel .section-content[data-v-b17e86c2]{padding:10px 12px}.chart-right .indicators-panel .indicator-card[data-v-b17e86c2]{padding:10px}.chart-right .indicators-panel .indicator-card .card-name[data-v-b17e86c2]{font-size:13px}.chart-right .indicators-panel .indicator-card .card-desc[data-v-b17e86c2],.chart-right .indicators-panel .indicator-card .card-params[data-v-b17e86c2]{font-size:11px}}.qt-header-btn[data-v-b17e86c2]{margin-left:16px;background:linear-gradient(135deg,#1890ff,#722ed1);border:none;color:#fff;border-radius:6px;font-weight:600;font-size:12px;padding:0 12px;height:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;-webkit-box-shadow:0 2px 8px rgba(24,144,255,.3);box-shadow:0 2px 8px rgba(24,144,255,.3);-webkit-transition:all .3s;transition:all .3s}.qt-header-btn[data-v-b17e86c2]:focus,.qt-header-btn[data-v-b17e86c2]:hover{background:linear-gradient(135deg,#40a9ff,#9254de);color:#fff;-webkit-box-shadow:0 4px 12px rgba(24,144,255,.45);box-shadow:0 4px 12px rgba(24,144,255,.45);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.qt-floating-btn[data-v-b17e86c2]{position:fixed;right:24px;bottom:80px;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:999;-webkit-transition:all .3s;transition:all .3s;font-size:22px}.qt-floating-btn[data-v-b17e86c2]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(24,144,255,.55);box-shadow:0 6px 24px rgba(24,144,255,.55)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark[data-v-b17e86c2],body.dark,body.realdark{background:#131722;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.3);box-shadow:0 2px 4px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .symbol-label[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .market-tag[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-up[data-v-b17e86c2],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-down[data-v-b17e86c2],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-b17e86c2],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 2px 8px rgba(23,125,220,.35);box-shadow:0 2px 8px rgba(23,125,220,.35)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-b17e86c2]:focus,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{background:linear-gradient(135deg,#3c9ae8,#854eca);-webkit-box-shadow:0 4px 12px rgba(23,125,220,.5);box-shadow:0 4px 12px rgba(23,125,220,.5)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-b17e86c2],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 4px 16px rgba(23,125,220,.45);box-shadow:0 4px 16px rgba(23,125,220,.45)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{-webkit-box-shadow:0 6px 24px rgba(23,125,220,.6);box-shadow:0 6px 24px rgba(23,125,220,.6)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection,body.dark,body.realdark{background-color:#1e222d;border-color:#2a2e39;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection:hover,body.dark,body.realdark{border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-focused .ant-select-selection,body.dark,body.realdark{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.3);box-shadow:0 0 0 2px rgba(24,144,255,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-arrow,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection__placeholder,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group[data-v-b17e86c2],body.dark,body.realdark{background:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff;background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item.active[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff;background:#1e222d;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-b17e86c2],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#21283c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-b17e86c2],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-b17e86c2],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-left-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn.active[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff;background:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-body[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-section[data-v-b17e86c2],body.dark,body.realdark{border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#2a2e39;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left .collapse-icon[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left span[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-b17e86c2]:hover,body.dark,body.realdark{background:#2a2e39;border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-b17e86c2],body.dark,body.realdark{border-color:#52c41a;background:#1e3a1e}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-b17e86c2]:hover,body.dark,body.realdark{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.3);box-shadow:0 2px 8px rgba(82,196,26,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-desc[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-params[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-b17e86c2],body.dark,body.realdark{color:#ff4d4f}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#ff7875}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-b17e86c2],body.dark,body.realdark{color:#b37feb}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#d3adf7}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-b17e86c2],body.dark,body.realdark{color:#5cdbd3}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#87e8de}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-b17e86c2],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#73d13d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.toggle-icon.active[data-v-b17e86c2],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .empty-indicators[data-v-b17e86c2],body.dark,body.realdark{color:#868993}@media (max-width:768px){.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .current-symbol[data-v-b17e86c2],body.dark,body.realdark{border-top-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-left[data-v-b17e86c2],body.dark,body.realdark{border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-b17e86c2],body.dark,body.realdark{border-top-color:#2a2e39;max-height:500px!important}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-bar,body.dark,body.realdark{border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab-active,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-ink-bar,body.dark,body.realdark{background-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-b17e86c2],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#2a3932}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-b17e86c2],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-b17e86c2],body.dark,body.realdark{color:#f6465d}}.add-stock-modal-content .market-tabs[data-v-b17e86c2]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-b17e86c2],.add-stock-modal-content .search-results-section[data-v-b17e86c2],.add-stock-modal-content .symbol-search-section[data-v-b17e86c2]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-b17e86c2],.add-stock-modal-content .search-results-section .section-title[data-v-b17e86c2]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-b17e86c2]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-b17e86c2]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-b17e86c2]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-b17e86c2]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-b17e86c2]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-b17e86c2]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.chart-container.theme-dark .add-stock-modal-content .hot-symbols-section .section-title[data-v-b17e86c2],.chart-container.theme-dark .add-stock-modal-content .search-results-section .section-title[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list[data-v-b17e86c2],body.dark,body.realdark{border-color:#363c4e;background-color:#2a2e39}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item[data-v-b17e86c2]:hover,body.dark,body.realdark{background-color:#363c4e}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.params-config-modal .indicator-info[data-v-b17e86c2]{text-align:center;margin-bottom:8px}.params-config-modal .indicator-info .indicator-name[data-v-b17e86c2]{font-size:16px;font-weight:600;color:#1f1f1f}.params-config-modal .params-form .param-item[data-v-b17e86c2]{margin-bottom:16px}.params-config-modal .params-form .param-item .param-header[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:6px}.params-config-modal .params-form .param-item .param-header .param-label[data-v-b17e86c2]{font-weight:500;color:#333}.theme-dark .params-config-modal .indicator-info .indicator-name[data-v-b17e86c2]{color:#e0e0e0}.theme-dark .params-config-modal .params-form .param-item .param-header .param-label[data-v-b17e86c2]{color:#d0d0d0} \ No newline at end of file diff --git a/frontend/dist/css/472.e7ead240.css b/frontend/dist/css/472.e7ead240.css new file mode 100644 index 0000000..2b4c6f3 --- /dev/null +++ b/frontend/dist/css/472.e7ead240.css @@ -0,0 +1 @@ +.user-manage-page[data-v-f0405968]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.user-manage-page .page-header[data-v-f0405968]{margin-bottom:24px}.user-manage-page .page-header .page-title[data-v-f0405968]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.user-manage-page .page-header .page-title .anticon[data-v-f0405968]{font-size:28px;color:#1890ff}.user-manage-page .page-header .page-desc[data-v-f0405968]{color:#64748b;font-size:14px;margin:0}.user-manage-page .manage-tabs[data-v-f0405968] .ant-tabs-bar{margin-bottom:20px}.user-manage-page .summary-cards[data-v-f0405968]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.user-manage-page .summary-cards .summary-card[data-v-f0405968]{background:#fff;border-radius:12px;padding:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.06);box-shadow:0 2px 12px rgba(0,0,0,.06);-webkit-transition:-webkit-transform .2s,-webkit-box-shadow .2s;transition:-webkit-transform .2s,-webkit-box-shadow .2s;transition:transform .2s,box-shadow .2s;transition:transform .2s,box-shadow .2s,-webkit-transform .2s,-webkit-box-shadow .2s}.user-manage-page .summary-cards .summary-card[data-v-f0405968]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 20px rgba(0,0,0,.1);box-shadow:0 4px 20px rgba(0,0,0,.1)}.user-manage-page .summary-cards .summary-card .summary-icon[data-v-f0405968]{width:48px;height:48px;border-radius:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-negative:0;flex-shrink:0}.user-manage-page .summary-cards .summary-card .summary-icon .anticon[data-v-f0405968]{font-size:22px;color:#fff}.user-manage-page .summary-cards .summary-card .summary-info[data-v-f0405968]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.user-manage-page .summary-cards .summary-card .summary-info .summary-value[data-v-f0405968]{font-size:22px;font-weight:700;color:#1e293b;line-height:1.3}.user-manage-page .summary-cards .summary-card .summary-info .summary-value .roi-badge[data-v-f0405968]{font-size:13px;font-weight:600;margin-left:6px;padding:1px 6px;border-radius:4px;background:rgba(0,0,0,.04)}.user-manage-page .summary-cards .summary-card .summary-info .summary-sub[data-v-f0405968]{font-size:12px;color:#64748b;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-manage-page .summary-cards .summary-card .summary-info .summary-label[data-v-f0405968]{font-size:13px;color:#94a3b8;margin-top:2px}.user-manage-page .toolbar[data-v-f0405968]{margin-bottom:16px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.user-manage-page .toolbar .toolbar-left[data-v-f0405968],.user-manage-page .toolbar .toolbar-right[data-v-f0405968]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.user-manage-page .user-table-card[data-v-f0405968]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.user-manage-page .user-table-card .text-muted[data-v-f0405968]{color:#94a3b8}.user-manage-page .text-profit[data-v-f0405968]{color:#52c41a;font-weight:600}.user-manage-page .text-loss[data-v-f0405968]{color:#ff4d4f;font-weight:600}.user-manage-page .pnl-value[data-v-f0405968]{font-size:14px}.user-manage-page .roi-text[data-v-f0405968]{font-size:12px;margin-left:4px}.user-manage-page .pnl-detail[data-v-f0405968]{font-size:11px;margin-top:2px}.user-manage-page .symbol-text[data-v-f0405968]{font-weight:500}.user-manage-page .symbol-count[data-v-f0405968]{font-size:11px;margin-top:2px}.user-manage-page .status-cell[data-v-f0405968]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;white-space:nowrap}.user-manage-page .status-cell .status-dot[data-v-f0405968]{display:inline-block;width:7px;height:7px;border-radius:50%;-ms-flex-negative:0;flex-shrink:0}.user-manage-page .status-cell .status-dot.dot-running[data-v-f0405968]{background:#52c41a;-webkit-box-shadow:0 0 6px rgba(82,196,26,.5);box-shadow:0 0 6px rgba(82,196,26,.5);-webkit-animation:pulse-green-f0405968 2s infinite;animation:pulse-green-f0405968 2s infinite}.user-manage-page .status-cell .status-dot.dot-stopped[data-v-f0405968]{background:#d9d9d9}.user-manage-page .status-cell .status-running[data-v-f0405968]{color:#52c41a;font-weight:500;font-size:13px}.user-manage-page .status-cell .status-stopped[data-v-f0405968]{color:#999;font-size:13px}@-webkit-keyframes pulse-green-f0405968{0%,to{opacity:1}50%{opacity:.5}}@keyframes pulse-green-f0405968{0%,to{opacity:1}50%{opacity:.5}}.user-manage-page .user-cell[data-v-f0405968]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;overflow:hidden;white-space:nowrap;cursor:default}.user-manage-page .user-cell .user-name[data-v-f0405968]{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:80px}.user-manage-page .indicator-name[data-v-f0405968]{color:#722ed1;font-size:12px}.user-manage-page .exchange-name[data-v-f0405968]{font-size:12px;text-transform:capitalize}.user-manage-page .address-text[data-v-f0405968],.user-manage-page .hash-text[data-v-f0405968]{font-family:Roboto Mono,Courier New,monospace;font-size:12px;color:#1890ff;cursor:pointer}.user-manage-page .address-text[data-v-f0405968]:hover,.user-manage-page .hash-text[data-v-f0405968]:hover{text-decoration:underline}.user-manage-page[data-v-f0405968] .ant-tag.ant-tag-grey{background-color:#f5f5f5;border-color:#d9d9d9;color:#595959}.user-manage-page.theme-dark[data-v-f0405968]{background:-webkit-gradient(linear,left top,left bottom,from(#141414),to(#1c1c1c));background:linear-gradient(180deg,#141414,#1c1c1c)}.user-manage-page.theme-dark .page-header .page-title[data-v-f0405968]{color:#e0e6ed}.user-manage-page.theme-dark .page-header .page-desc[data-v-f0405968]{color:#8b949e}.user-manage-page.theme-dark .manage-tabs[data-v-f0405968] .ant-tabs-bar{border-bottom-color:#2a2a2a}.user-manage-page.theme-dark .manage-tabs[data-v-f0405968] .ant-tabs-tab{color:#8b949e}.user-manage-page.theme-dark .manage-tabs[data-v-f0405968] .ant-tabs-tab:hover{color:#c9d1d9}.user-manage-page.theme-dark .manage-tabs[data-v-f0405968] .ant-tabs-tab-active{color:#1890ff}.user-manage-page.theme-dark .summary-cards .summary-card[data-v-f0405968]{background:#1c1c1c;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.3);box-shadow:0 2px 12px rgba(0,0,0,.3)}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-value[data-v-f0405968]{color:#e0e6ed}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-value .roi-badge[data-v-f0405968]{background:hsla(0,0%,100%,.08)}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-sub[data-v-f0405968]{color:#8b949e}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-label[data-v-f0405968]{color:#6e7681}.user-manage-page.theme-dark .user-table-card[data-v-f0405968]{background:#1c1c1c;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.user-manage-page.theme-dark .user-table-card[data-v-f0405968] .ant-card-body{background:#1c1c1c}.user-manage-page.theme-dark .user-table-card[data-v-f0405968] .ant-table{background:#1c1c1c;color:#c9d1d9}.user-manage-page.theme-dark .user-table-card[data-v-f0405968] .ant-table .ant-table-thead>tr>th{background:#252525;color:#e0e6ed;border-bottom-color:#2a2a2a}.user-manage-page.theme-dark .user-table-card[data-v-f0405968] .ant-table .ant-table-tbody>tr>td{border-bottom-color:#2a2a2a}.user-manage-page.theme-dark .user-table-card[data-v-f0405968] .ant-table .ant-table-tbody>tr:hover>td{background:#252525}.user-manage-page.theme-dark .user-table-card .text-muted[data-v-f0405968]{color:#6e7681}.user-manage-page.theme-dark .user-table-card h4[data-v-f0405968]{color:#e0e6ed!important}.user-manage-page .credits-value[data-v-f0405968]{font-weight:600;color:#722ed1}.user-manage-page .current-credits-info[data-v-f0405968],.user-manage-page .current-vip-info[data-v-f0405968]{margin-bottom:16px;padding:12px 16px;background:#f5f5f5;border-radius:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.user-manage-page .current-credits-info .label[data-v-f0405968],.user-manage-page .current-vip-info .label[data-v-f0405968]{color:#666}.user-manage-page .current-credits-info .value[data-v-f0405968],.user-manage-page .current-vip-info .value[data-v-f0405968]{font-weight:600;color:#1890ff;font-size:18px}.user-manage-page .current-credits-info .value.active[data-v-f0405968],.user-manage-page .current-vip-info .value.active[data-v-f0405968]{color:#52c41a}.user-manage-page .current-credits-info .value.expired[data-v-f0405968],.user-manage-page .current-vip-info .value.expired[data-v-f0405968]{color:#999}@media (max-width:1200px){.summary-cards[data-v-f0405968]{grid-template-columns:repeat(2,1fr)!important}}@media (max-width:768px){.summary-cards[data-v-f0405968]{grid-template-columns:1fr!important}} \ No newline at end of file diff --git a/frontend/dist/css/488.c66b70a6.css b/frontend/dist/css/488.c66b70a6.css new file mode 100644 index 0000000..07a455f --- /dev/null +++ b/frontend/dist/css/488.c66b70a6.css @@ -0,0 +1 @@ +.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.polymarket-analysis-modal .input-section .input-actions[data-v-67e891d2]{margin-top:12px}.polymarket-analysis-modal .result-section .market-info[data-v-67e891d2]{margin-bottom:24px}.polymarket-analysis-modal .result-section .market-info h3[data-v-67e891d2]{margin-bottom:12px;font-size:18px;font-weight:600}.polymarket-analysis-modal .result-section .market-info .market-meta[data-v-67e891d2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;-ms-flex-wrap:wrap;flex-wrap:wrap}.polymarket-analysis-modal .result-section .market-info .market-meta .meta-item[data-v-67e891d2]{color:rgba(0,0,0,.65);font-size:14px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison[data-v-67e891d2]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item[data-v-67e891d2]{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-label[data-v-67e891d2]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value[data-v-67e891d2]{font-size:24px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.ai-prob[data-v-67e891d2]{color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-positive[data-v-67e891d2]{color:#52c41a}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-negative[data-v-67e891d2]{color:#ff4d4f}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-neutral[data-v-67e891d2]{color:rgba(0,0,0,.65)}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section[data-v-67e891d2]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card[data-v-67e891d2]{text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-label[data-v-67e891d2]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-value[data-v-67e891d2]{font-size:24px;font-weight:600;color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section[data-v-67e891d2],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section[data-v-67e891d2]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section h4[data-v-67e891d2],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section h4[data-v-67e891d2]{margin-bottom:12px;font-size:16px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section .reasoning-text[data-v-67e891d2],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section .reasoning-text[data-v-67e891d2]{line-height:1.8;color:rgba(0,0,0,.85);white-space:pre-wrap}.polymarket-analysis-modal .result-section .result-actions[data-v-67e891d2]{margin-top:24px;text-align:right}.polymarket-analysis-modal .loading-section[data-v-67e891d2]{text-align:center;padding:40px 0}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-bar{border-bottom-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-tab{color:#a3a3a3!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-tab-active{color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-ink-bar{background:#58a6ff!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-divider{color:#d4d4d4;border-top-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-divider-inner-text{color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input,.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input-affix-wrapper,.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input-number,.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input-textarea textarea{background:#141414!important;border-color:#2a2a2a!important;color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-table{background:#1c1c1c;color:#d4d4d4}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-table-thead>tr>th{background:#252525;color:#d4d4d4;border-bottom-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-table-tbody>tr>td{background:#1c1c1c;color:#d4d4d4;border-bottom-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-btn-link{color:#58a6ff!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-alert{background:#1c1c1c;border-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-alert-message{color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-alert-description{color:#a3a3a3!important}.polymarket-analysis-modal.theme-dark .market-info h3[data-v-67e891d2]{color:#d4d4d4}.polymarket-analysis-modal.theme-dark .market-info .market-meta .meta-item[data-v-67e891d2]{color:#a3a3a3}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item[data-v-67e891d2]{background:#252525;border:1px solid #2a2a2a}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item .prob-label[data-v-67e891d2]{color:#a3a3a3}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item .prob-value[data-v-67e891d2]{color:#e5e5e5}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item .prob-value.divergence-neutral[data-v-67e891d2]{color:#b3b3b3}.polymarket-analysis-modal.theme-dark .analysis-result .recommendation-section .rec-card[data-v-67e891d2]{background:#252525;border:1px solid #2a2a2a}.polymarket-analysis-modal.theme-dark .analysis-result .recommendation-section .rec-card .rec-label[data-v-67e891d2]{color:#a3a3a3}.polymarket-analysis-modal.theme-dark .analysis-result .recommendation-section .rec-card .rec-value[data-v-67e891d2]{color:#e5e5e5}.polymarket-analysis-modal.theme-dark .analysis-result .key-factors-section .reasoning-text[data-v-67e891d2],.polymarket-analysis-modal.theme-dark .analysis-result .key-factors-section h4[data-v-67e891d2],.polymarket-analysis-modal.theme-dark .analysis-result .reasoning-section .reasoning-text[data-v-67e891d2],.polymarket-analysis-modal.theme-dark .analysis-result .reasoning-section h4[data-v-67e891d2]{color:#d4d4d4}.ai-asset-analysis-page[data-v-443699fa]{padding:16px;min-height:calc(100vh - 120px);background:#f0f2f5}.ai-asset-analysis-page .opp-section[data-v-443699fa]{margin-bottom:12px}.ai-asset-analysis-page .opp-section .opp-header[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:8px;padding:0 4px}.ai-asset-analysis-page .opp-section .opp-header .opp-title[data-v-443699fa]{font-size:14px;font-weight:600;color:#1a1a2e}.ai-asset-analysis-page .opp-section .opp-header .opp-header-right[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.ai-asset-analysis-page .opp-section .opp-header .opp-update-hint[data-v-443699fa]{font-size:12px;color:#8c8c8c}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]{overflow:hidden;position:relative;border-radius:10px}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:after,.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:before{content:"";position:absolute;top:0;bottom:0;width:40px;z-index:2;pointer-events:none}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:before{left:0;background:-webkit-gradient(linear,left top,right top,from(#f0f2f5),to(transparent));background:linear-gradient(90deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:after{right:0;background:-webkit-gradient(linear,right top,left top,from(#f0f2f5),to(transparent));background:linear-gradient(270deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-track[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-animation:opp-scroll-left-443699fa 60s linear infinite;animation:opp-scroll-left-443699fa 60s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content;padding:4px 0}.ai-asset-analysis-page .opp-section .opp-track.paused[data-v-443699fa]{-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes opp-scroll-left-443699fa{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes opp-scroll-left-443699fa{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.ai-asset-analysis-page .opp-section .opp-card[data-v-443699fa]{width:190px;background:#fff;border-radius:10px;padding:12px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06);cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-left:3px solid #d9d9d9;-ms-flex-negative:0;flex-shrink:0}.ai-asset-analysis-page .opp-section .opp-card.is-prediction-market[data-v-443699fa]{width:280px;min-height:160px}.ai-asset-analysis-page .opp-section .opp-card.bullish[data-v-443699fa]{border-left-color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card.bearish[data-v-443699fa]{border-left-color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card.market-predictionmarket[data-v-443699fa]{border-left-color:#13c2c2;background:linear-gradient(135deg,#fff,#f0f9ff)}.ai-asset-analysis-page .opp-section .opp-card[data-v-443699fa]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(0,0,0,.1);box-shadow:0 4px 12px rgba(0,0,0,.1)}.ai-asset-analysis-page .opp-section .opp-card .opp-top[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:6px;gap:8px}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol[data-v-443699fa]{font-weight:700;font-size:14px;color:#1a1a2e;-webkit-box-flex:1;-ms-flex:1;flex:1;word-break:break-word;line-height:1.4}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol.prediction-title[data-v-443699fa]{font-size:13px;font-weight:600;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.ai-asset-analysis-page .opp-section .opp-card .opp-market-tag[data-v-443699fa]{font-size:11px;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.ai-asset-analysis-page .opp-section .opp-card .opp-price[data-v-443699fa]{font-size:13px;color:#595959}.ai-asset-analysis-page .opp-section .opp-card .opp-change[data-v-443699fa]{font-size:15px;font-weight:600}.ai-asset-analysis-page .opp-section .opp-card .opp-change.up[data-v-443699fa]{color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card .opp-change.down[data-v-443699fa]{color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card .opp-signal[data-v-443699fa]{margin-top:4px}.ai-asset-analysis-page .opp-section .opp-card .opp-reason[data-v-443699fa]{font-size:11px;color:#8c8c8c;margin-top:4px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ai-asset-analysis-page .opp-section .opp-card .opp-actions[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:6px;gap:6px}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-443699fa]{font-size:12px;color:#1890ff;font-weight:500;cursor:pointer}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-443699fa]:hover{text-decoration:underline}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-443699fa]{font-size:11px;color:#fff;background:linear-gradient(135deg,#1890ff,#722ed1);padding:2px 8px;border-radius:10px;font-weight:600;cursor:pointer;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-443699fa]:hover{-webkit-transform:scale(1.05);transform:scale(1.05);-webkit-box-shadow:0 2px 8px rgba(114,46,209,.3);box-shadow:0 2px 8px rgba(114,46,209,.3)}.ai-asset-analysis-page .qt-floating-btn[data-v-443699fa]{position:fixed;right:24px;bottom:80px;width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:24px;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:1000;-webkit-transition:all .3s;transition:all .3s;-webkit-animation:qt-float-pulse-443699fa 2s ease-in-out infinite;animation:qt-float-pulse-443699fa 2s ease-in-out infinite}.ai-asset-analysis-page .qt-floating-btn[data-v-443699fa]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(114,46,209,.5);box-shadow:0 6px 24px rgba(114,46,209,.5)}@-webkit-keyframes qt-float-pulse-443699fa{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}@keyframes qt-float-pulse-443699fa{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}.ai-asset-analysis-page .workspace-card[data-v-443699fa]{border-radius:12px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.06);box-shadow:0 1px 4px rgba(0,0,0,.06)}.ai-asset-analysis-page .workspace-card[data-v-443699fa] .ant-card-body{padding:0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-bar{margin-bottom:0;padding:0 16px;border-bottom:1px solid #f0f0f0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab{font-size:15px;padding:14px 16px}.ai-asset-analysis-page .workspace-card .tab-body[data-v-443699fa] .ai-analysis-container.embedded,.ai-asset-analysis-page .workspace-card .tab-body[data-v-443699fa] .portfolio-container.embedded{border-radius:0;overflow:hidden}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content[data-v-443699fa]{padding:40px 20px;text-align:center}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder .placeholder-icon[data-v-443699fa]{font-size:64px;color:#1890ff;margin-bottom:24px}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder h3[data-v-443699fa]{font-size:20px;font-weight:600;margin-bottom:12px;color:rgba(0,0,0,.85)}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder p[data-v-443699fa]{font-size:14px;color:rgba(0,0,0,.65);margin-bottom:24px}.ai-asset-analysis-page.theme-dark[data-v-443699fa]{background:#141414}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-title[data-v-443699fa]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-update-hint[data-v-443699fa]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-443699fa]:before{background:-webkit-gradient(linear,left top,right top,from(#141414),to(transparent));background:linear-gradient(90deg,#141414,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-443699fa]:after{background:-webkit-gradient(linear,right top,left top,from(#141414),to(transparent));background:linear-gradient(270deg,#141414,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-443699fa]{background:#1c1c1c;border-color:#2a2a2a;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card.market-predictionmarket[data-v-443699fa]{background:linear-gradient(135deg,#1c1c1c,#141414);border-left-color:#13c2c2}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-symbol[data-v-443699fa]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-price[data-v-443699fa],.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-reason[data-v-443699fa]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-action[data-v-443699fa]{color:#58a6ff}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-trade-btn[data-v-443699fa]{background:linear-gradient(135deg,#58a6ff,#8957e5)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-443699fa]:hover{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.4);box-shadow:0 4px 12px rgba(0,0,0,.4)}.ai-asset-analysis-page.theme-dark .workspace-card[data-v-443699fa]{background:#1c1c1c;border-color:#2a2a2a}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-bar{border-bottom-color:#2a2a2a}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab{color:#8b949e}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab:hover{color:#c9d1d9}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab-active{color:#58a6ff}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-ink-bar{background-color:#58a6ff}.ai-asset-analysis-page.theme-dark .workspace-card .polymarket-tab-content .polymarket-placeholder h3[data-v-443699fa]{color:#d4d4d4}.ai-asset-analysis-page.theme-dark .workspace-card .polymarket-tab-content .polymarket-placeholder p[data-v-443699fa]{color:#a3a3a3} \ No newline at end of file diff --git a/frontend/dist/css/185.c3803b75.css b/frontend/dist/css/506.c3803b75.css similarity index 100% rename from frontend/dist/css/185.c3803b75.css rename to frontend/dist/css/506.c3803b75.css diff --git a/frontend/dist/css/620.973fab6f.css b/frontend/dist/css/620.973fab6f.css new file mode 100644 index 0000000..ea7a701 --- /dev/null +++ b/frontend/dist/css/620.973fab6f.css @@ -0,0 +1 @@ +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-comment.cm-attribute{color:#97b757}.cm-s-monokai span.cm-comment.cm-def{color:#bc9262}.cm-s-monokai span.cm-comment.cm-tag{color:#bc6283}.cm-s-monokai span.cm-comment.cm-type{color:#5998a6}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-eclipse span.cm-meta{color:#ff1717}.cm-s-eclipse span.cm-keyword{line-height:1em;font-weight:700;color:#7f0055}.cm-s-eclipse span.cm-atom{color:#219}.cm-s-eclipse span.cm-number{color:#164}.cm-s-eclipse span.cm-def{color:#00f}.cm-s-eclipse span.cm-variable{color:#000}.cm-s-eclipse span.cm-type,.cm-s-eclipse span.cm-variable-2,.cm-s-eclipse span.cm-variable-3{color:#0000c0}.cm-s-eclipse span.cm-operator,.cm-s-eclipse span.cm-property{color:#000}.cm-s-eclipse span.cm-comment{color:#3f7f5f}.cm-s-eclipse span.cm-string{color:#2a00ff}.cm-s-eclipse span.cm-string-2{color:#f50}.cm-s-eclipse span.cm-qualifier{color:#555}.cm-s-eclipse span.cm-builtin{color:#30a}.cm-s-eclipse span.cm-bracket{color:#cc7}.cm-s-eclipse span.cm-tag{color:#170}.cm-s-eclipse span.cm-attribute{color:#00c}.cm-s-eclipse span.cm-link{color:#219}.cm-s-eclipse span.cm-error{color:red}.cm-s-eclipse .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-eclipse .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}[data-v-4fea1865] .ant-modal{top:20px!important}.visual-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;background:#fafafa;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:500px;overflow:hidden}.visual-modules-list[data-v-4fea1865]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px}.empty-visual-state[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;color:#999}.visual-module-card[data-v-4fea1865]{background:#fff;border:1px solid #e8e8e8;border-radius:4px;margin-bottom:12px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.visual-module-card .module-header[data-v-4fea1865]{padding:8px 12px;border-bottom:1px solid #f0f0f0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;background:#f9f9f9}.visual-module-card .module-header .module-title[data-v-4fea1865],.visual-module-card .module-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.visual-module-card .module-header .module-title[data-v-4fea1865]{font-weight:500;gap:8px}.visual-module-card .module-header .remove-icon[data-v-4fea1865]{cursor:pointer;color:#999}.visual-module-card .module-header .remove-icon[data-v-4fea1865]:hover{color:#ff4d4f}.visual-module-card .module-body[data-v-4fea1865]{padding:12px}.visual-module-card .style-config[data-v-4fea1865]{margin-top:12px;padding-top:12px;border-top:1px dashed #f0f0f0}.visual-module-card .style-config .label[data-v-4fea1865]{margin-right:8px;color:#666}.add-module-bar[data-v-4fea1865]{padding:12px;background:#fff;border-top:1px solid #e8e8e8}@media (max-width:768px){.visual-editor-container[data-v-4fea1865]{height:auto;min-height:400px}}.ant-form-item[data-v-4fea1865]{margin-bottom:16px}.editor-content[data-v-4fea1865]{padding:24px;background:#fff;min-height:500px;max-height:82vh;overflow-y:auto}.editor-layout[data-v-4fea1865]{min-height:450px}.code-editor-column[data-v-4fea1865]{height:100%}.code-editor-column[data-v-4fea1865],.code-section[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.code-section[data-v-4fea1865]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:12px;padding-bottom:12px;border-bottom:2px solid #f0f0f0}.code-section .section-header .section-title[data-v-4fea1865],.code-section .section-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.code-section .section-header .section-title[data-v-4fea1865]{font-weight:600;font-size:14px;color:#262626;gap:8px}.code-section .section-header .section-title[data-v-4fea1865]:before{content:"";display:inline-block;width:4px;height:14px;background:#1890ff;border-radius:2px}.code-section .section-header .section-actions[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link{color:#1890ff;padding:0 8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link:hover{color:#40a9ff}.code-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;overflow:hidden;height:62vh;min-height:520px;max-height:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05);box-shadow:inset 0 1px 3px rgba(0,0,0,.05);-webkit-transition:all .3s ease;transition:all .3s ease}.code-editor-container[data-v-4fea1865]:hover{border-color:#40a9ff}.code-editor-container[data-v-4fea1865]:focus-within{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05);box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05)}.code-editor-container[data-v-4fea1865] .CodeMirror{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;font-family:Courier New,Consolas,Liberation Mono,Menlo,monospace;font-size:13px;line-height:1.6;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fafafa}.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{-webkit-box-flex:1;-ms-flex:1;flex:1;min-height:100%;max-height:none;overflow-y:auto;overflow-x:auto}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:100%!important;padding-left:12px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-gutters{border-right:1px solid #e8e8e8;background:-webkit-gradient(linear,left top,right top,from(#fafafa),to(#f5f5f5));background:linear-gradient(90deg,#fafafa 0,#f5f5f5);width:45px;padding-right:4px}.code-editor-container[data-v-4fea1865] .CodeMirror-linenumber{padding:0 8px 0 4px;min-width:30px;text-align:right;color:#999;font-size:12px}.code-editor-container[data-v-4fea1865] .CodeMirror-lines{padding:12px 8px;background:#fff}.code-editor-container[data-v-4fea1865] .CodeMirror-line{padding-left:0}.code-editor-container[data-v-4fea1865] .CodeMirror-cursor{border-left:2px solid #1890ff}.code-editor-container[data-v-4fea1865] .CodeMirror-selected{background:#e6f7ff}.code-mode-split[data-v-4fea1865]{width:100%}.ai-pane[data-v-4fea1865],.ai-panel[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ai-panel[data-v-4fea1865]{border:1px solid #e8e8e8;border-radius:6px;background:#fafafa;padding:12px;height:62vh;min-height:520px}.ai-panel-title[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:10px;color:#262626}.ai-panel-hint[data-v-4fea1865]{margin-top:10px;color:#8c8c8c;font-size:12px;line-height:1.5}.ai-panel[data-v-4fea1865] textarea.ant-input{-webkit-box-flex:1;-ms-flex:1;flex:1;resize:none}.editor-footer[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px}.editor-footer[data-v-4fea1865] .ant-btn{height:36px;padding:0 20px;font-weight:500;border-radius:4px;-webkit-transition:all .3s ease;transition:all .3s ease}.editor-footer[data-v-4fea1865] .ant-btn:not(.ant-btn-primary):hover{border-color:#40a9ff;color:#40a9ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 8px rgba(24,144,255,.2);box-shadow:0 2px 8px rgba(24,144,255,.2)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary{-webkit-box-shadow:0 2px 4px rgba(24,144,255,.3);box-shadow:0 2px 4px rgba(24,144,255,.3)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary:hover{-webkit-box-shadow:0 4px 12px rgba(24,144,255,.4);box-shadow:0 4px 12px rgba(24,144,255,.4);-webkit-transform:translateY(-1px);transform:translateY(-1px)}@media (max-width:768px){.indicator-editor-modal[data-v-4fea1865] .ant-modal{width:100%!important;max-width:100%!important;margin:0!important;top:0!important;padding-bottom:0!important;max-height:100vh!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-content{height:100vh!important;max-height:100vh!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:0!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-header{-ms-flex-negative:0;flex-shrink:0;padding:16px;border-bottom:1px solid #e8e8e8}.indicator-editor-modal[data-v-4fea1865] .ant-modal-body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:0!important;min-height:0}.indicator-editor-modal[data-v-4fea1865] .ant-modal-footer{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;border-top:1px solid #e8e8e8}.editor-content[data-v-4fea1865]{padding:16px!important;min-height:auto!important;max-height:none!important;overflow-y:visible!important}.editor-layout[data-v-4fea1865]{min-height:auto!important}.code-editor-column[data-v-4fea1865]{width:100%!important;margin-bottom:16px}.code-section[data-v-4fea1865]{margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{padding-bottom:8px;margin-bottom:8px}.code-section .section-header .section-title[data-v-4fea1865]{font-size:13px}.code-editor-container[data-v-4fea1865]{height:250px!important}.code-editor-container[data-v-4fea1865],.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{min-height:250px!important;max-height:250px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:250px!important}.ai-panel[data-v-4fea1865]{height:auto!important;min-height:auto!important}.editor-footer[data-v-4fea1865]{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;gap:8px;padding:0}.editor-footer[data-v-4fea1865] .ant-btn{width:100%;height:40px;margin:0}}.chart-left[data-v-58f93984]{width:70%!important;-webkit-box-flex:0!important;-ms-flex:0 0 70%!important;flex:0 0 70%!important;position:relative;border-right:1px solid #e8e8e8;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}.chart-left.theme-dark[data-v-58f93984]{background:#141414;border-right-color:#2a2a2a}.chart-wrapper[data-v-58f93984]{width:100%;height:100%;position:relative;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;display:-webkit-box;display:-ms-flexbox;display:flex}.theme-dark .chart-wrapper[data-v-58f93984]{background:#141414}.drawing-toolbar[data-v-58f93984]{-ms-flex-negative:0;flex-shrink:0;width:40px;background:#fff;border-right:1px solid #e8e8e8;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 4px;gap:4px;z-index:10;overflow-y:auto;overflow-x:hidden}.chart-left.theme-dark .drawing-toolbar[data-v-58f93984]{background:#141414;border-right-color:#2a2a2a}.drawing-tool-btn[data-v-58f93984]{width:32px;height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;border-radius:4px;-webkit-transition:all .2s;transition:all .2s;color:#666;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .drawing-tool-btn[data-v-58f93984]{color:#d1d4dc}.drawing-tool-btn[data-v-58f93984]:hover{background:#f0f2f5;color:#1890ff}.chart-left.theme-dark .drawing-tool-btn[data-v-58f93984]:hover{background:#252525;color:#13c2c2}.drawing-tool-btn.active[data-v-58f93984]{background:#e6f7ff;color:#1890ff;border:1px solid #1890ff}.chart-left.theme-dark .drawing-tool-btn.active[data-v-58f93984]{background:#252525;color:#13c2c2;border-color:#13c2c2}.drawing-toolbar .ant-divider-vertical[data-v-58f93984]{margin:8px 0;height:20px}.indicator-toolbar[data-v-58f93984]{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 12px;background:#fff;border-bottom:1px solid #e8e8e8;-ms-flex-wrap:wrap;flex-wrap:wrap;z-index:1;position:relative;width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.indicator-toolbar[data-v-58f93984]::-webkit-scrollbar{display:none;width:0;height:0}.chart-content-area[data-v-58f93984]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden}.chart-left.theme-dark .indicator-toolbar[data-v-58f93984]{background:#141414;border-bottom-color:#2a2a2a}.indicator-btn[data-v-58f93984]{padding:4px 12px;font-size:12px;font-weight:600;color:#666;background:#f0f2f5;border:1px solid #e8e8e8;border-radius:4px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;min-width:40px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .indicator-btn[data-v-58f93984]{color:#d1d4dc;background:#252525;border-color:#2a2a2a}.indicator-btn[data-v-58f93984]:hover{color:#1890ff;border-color:#1890ff;background:#f0f8ff}.chart-left.theme-dark .indicator-btn[data-v-58f93984]:hover{color:#13c2c2;border-color:#13c2c2;background:#252525}.indicator-btn.active[data-v-58f93984]{color:#1890ff;background:#fff;border-color:#1890ff;border-width:2px;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.1);box-shadow:0 0 0 2px rgba(24,144,255,.1)}.chart-left.theme-dark .indicator-btn.active[data-v-58f93984]{color:#13c2c2;background:#252525;border-color:#13c2c2;-webkit-box-shadow:0 0 0 2px rgba(19,194,194,.2);box-shadow:0 0 0 2px rgba(19,194,194,.2)}.kline-chart-container[data-v-58f93984]{-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;min-width:0;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;overflow:hidden}.theme-dark .kline-chart-container[data-v-58f93984]{background:#141414}.chart-overlay[data-v-58f93984]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.95);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;backdrop-filter:blur(2px)}.chart-left.theme-dark .chart-overlay[data-v-58f93984]{background:hsla(0,0%,8%,.95)}.error-box[data-v-58f93984]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333}.initial-hint[data-v-58f93984]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .initial-hint[data-v-58f93984]{background:hsla(0,0%,8%,.98)}.hint-box[data-v-58f93984]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:400px;padding:20px}.pyodide-warning[data-v-58f93984]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .pyodide-warning[data-v-58f93984]{background:hsla(0,0%,8%,.98)}.warning-box[data-v-58f93984]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:500px;padding:20px}.warning-title[data-v-58f93984]{font-size:16px;font-weight:600;color:#faad14;margin-bottom:8px}.warning-desc[data-v-58f93984]{font-size:14px;color:#666;line-height:1.6}.chart-left.theme-dark .warning-box[data-v-58f93984]{color:#d1d4dc}.chart-left.theme-dark .warning-title[data-v-58f93984]{color:#faad14}.chart-left.theme-dark .warning-desc[data-v-58f93984]{color:#868993}.chart-left.theme-dark .hint-box[data-v-58f93984]{color:#d1d4dc}.hint-title[data-v-58f93984]{font-size:18px;font-weight:600;color:#333;margin-bottom:12px}.chart-left.theme-dark .hint-title[data-v-58f93984]{color:#d1d4dc}.hint-desc[data-v-58f93984]{font-size:14px;color:#999;line-height:1.6}.chart-left.theme-dark .hint-desc[data-v-58f93984]{color:#787b86}.history-loading-hint[data-v-58f93984]{position:absolute;left:20px;top:60px;z-index:1000!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 16px;background:hsla(0,0%,100%,.98)!important;border:1px solid #e8e8e8;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);font-size:14px;color:#666!important;backdrop-filter:blur(4px);pointer-events:none;visibility:visible!important;opacity:1!important}.chart-left.theme-dark .history-loading-hint[data-v-58f93984]{background:hsla(0,0%,8%,.98)!important;border-color:#2a2a2a;color:#d1d4dc!important}.loading-text[data-v-58f93984]{white-space:nowrap;margin-left:4px}@media (max-width:768px){.drawing-toolbar[data-v-58f93984]{display:none}.indicator-toolbar[data-v-58f93984]{padding-left:12px;-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.indicator-toolbar[data-v-58f93984]::-webkit-scrollbar{display:none;width:0;height:0}.indicator-btn[data-v-58f93984]{-ms-flex-negative:0;flex-shrink:0}}@media (max-width:1200px){.drawing-toolbar[data-v-58f93984]{display:none}.indicator-toolbar[data-v-58f93984]{padding-left:12px}.kline-chart-container[data-v-58f93984]{margin-left:0}.chart-left[data-v-58f93984]{width:100%!important;min-width:100%!important;border-right:none;border-bottom:1px solid #e8e8e8;height:600px!important;min-height:600px!important}.chart-wrapper[data-v-58f93984],.kline-chart-container[data-v-58f93984]{height:100%!important;min-height:600px!important}}@media (max-width:992px){.chart-left[data-v-58f93984]{height:650px!important;min-height:650px!important}.chart-wrapper[data-v-58f93984],.kline-chart-container[data-v-58f93984]{height:100%!important;min-height:650px!important}}@media (max-width:768px){.chart-left[data-v-58f93984]{height:60vh!important;min-height:400px!important;max-height:80vh!important}.chart-wrapper[data-v-58f93984]{height:100%!important;min-height:400px!important;max-height:100%!important}.kline-chart-container[data-v-58f93984]{height:calc(100% - 45px)!important;min-height:350px!important;max-height:calc(100% - 45px)!important}}@media (max-width:576px){.chart-left[data-v-58f93984]{height:55vh!important;min-height:350px!important;max-height:75vh!important}.chart-wrapper[data-v-58f93984]{height:100%!important;min-height:350px!important;max-height:100%!important}.kline-chart-container[data-v-58f93984]{height:calc(100% - 45px)!important;min-height:300px!important;max-height:calc(100% - 45px)!important}}[data-v-473e449c] .ant-form-item-label{white-space:normal;line-height:1.2}[data-v-473e449c] .ant-form-item-label>label{white-space:normal}[data-v-473e449c] .ant-form-item-control{min-width:0}.backtest-modal[data-v-473e449c] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.backtest-content[data-v-473e449c]{position:relative}.field-hint[data-v-473e449c]{margin-top:4px;font-size:12px;line-height:1.4;color:#8c8c8c}.section-title[data-v-473e449c]{font-size:15px;font-weight:600;color:#262626;margin-bottom:16px;padding-bottom:8px;border-bottom:2px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.section-title .anticon[data-v-473e449c]{color:#1890ff}.config-section[data-v-473e449c]{margin-bottom:24px}.precision-info[data-v-473e449c]{-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.date-quick-select[data-v-473e449c],.precision-info[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.date-quick-select[data-v-473e449c]{padding:8px 12px;background:#fafafa;border-radius:6px;border:1px solid #f0f0f0}.result-section[data-v-473e449c]{margin-top:24px}.metrics-cards[data-v-473e449c]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}@media (max-width:1200px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(4,1fr)}}@media (max-width:992px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(3,1fr)}}@media (max-width:576px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(2,1fr)}}.metric-card[data-v-473e449c]{background:#fafafa;border-radius:8px;padding:16px;text-align:center;-webkit-transition:all .3s;transition:all .3s}.metric-card[data-v-473e449c]:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.1);box-shadow:0 2px 8px rgba(0,0,0,.1)}.metric-card.positive[data-v-473e449c]{background:linear-gradient(135deg,#f6ffed,#d9f7be)}.metric-card.positive .metric-value[data-v-473e449c]{color:#52c41a}.metric-card.negative[data-v-473e449c]{background:linear-gradient(135deg,#fff2f0,#ffccc7)}.metric-card.negative .metric-value[data-v-473e449c]{color:#f5222d}.metric-card .metric-label[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.metric-card .metric-value[data-v-473e449c]{font-size:20px;font-weight:700;color:#262626}.metric-card .metric-amount[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-top:4px}.chart-section[data-v-473e449c]{margin-bottom:24px}.chart-title[data-v-473e449c]{font-size:14px;font-weight:600;color:#595959;margin-bottom:12px}.equity-chart[data-v-473e449c]{width:100%;height:300px;border:1px solid #f0f0f0;border-radius:8px}.trades-section[data-v-473e449c]{margin-top:24px}.loading-overlay[data-v-473e449c]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:100;border-radius:8px}.loading-overlay .loading-content[data-v-473e449c]{text-align:center}.loading-overlay .loading-animation[data-v-473e449c]{margin-bottom:20px}.loading-overlay .chart-bars[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;height:60px;gap:6px}.loading-overlay .bar[data-v-473e449c]{width:8px;background:-webkit-gradient(linear,left top,left bottom,from(#1890ff),to(#52c41a));background:linear-gradient(180deg,#1890ff,#52c41a);border-radius:4px;-webkit-animation:barPulse-473e449c 1.2s ease-in-out infinite;animation:barPulse-473e449c 1.2s ease-in-out infinite}.loading-overlay .bar1[data-v-473e449c]{height:20px;-webkit-animation-delay:0s;animation-delay:0s}.loading-overlay .bar2[data-v-473e449c]{height:35px;-webkit-animation-delay:.1s;animation-delay:.1s}.loading-overlay .bar3[data-v-473e449c]{height:50px;-webkit-animation-delay:.2s;animation-delay:.2s}.loading-overlay .bar4[data-v-473e449c]{height:35px;-webkit-animation-delay:.3s;animation-delay:.3s}.loading-overlay .bar5[data-v-473e449c]{height:20px;-webkit-animation-delay:.4s;animation-delay:.4s}@-webkit-keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}@keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}.loading-overlay .loading-text[data-v-473e449c]{font-size:16px;font-weight:500;color:#1890ff;margin-bottom:8px}.loading-overlay .loading-subtext[data-v-473e449c]{font-size:13px;color:#666;-webkit-animation:fadeInOut-473e449c 2s ease-in-out infinite;animation:fadeInOut-473e449c 2s ease-in-out infinite}@-webkit-keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}@keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}.backtest-run-viewer[data-v-a484239a] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.metrics-cards[data-v-a484239a]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.metric-card[data-v-a484239a]{background:#fff;border:1px solid #f0f0f0;border-radius:8px;padding:12px}.metric-card.positive[data-v-a484239a]{border-color:rgba(82,196,26,.35)}.metric-card.negative[data-v-a484239a]{border-color:rgba(245,34,45,.35)}.metric-label[data-v-a484239a]{color:#8c8c8c;font-size:12px}.metric-value[data-v-a484239a]{font-size:18px;font-weight:600;margin-top:4px}.metric-amount[data-v-a484239a]{color:#8c8c8c;font-size:12px;margin-top:4px}.chart-section[data-v-a484239a]{margin-top:8px}.chart-title[data-v-a484239a]{font-weight:600;margin:8px 0;color:#262626}.equity-chart[data-v-a484239a]{width:100%;height:280px}.trades-section[data-v-a484239a]{margin-top:16px}.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.chart-container[data-v-211c2fea]{background:#f0f2f5;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.chart-container[data-v-211c2fea],.chart-header[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;min-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-header[data-v-211c2fea]{max-width:100%;background:#fff;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.02);box-shadow:0 2px 4px rgba(0,0,0,.02)}.header-top[data-v-211c2fea]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;height:60px}.header-left[data-v-211c2fea],.header-top[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.header-left[data-v-211c2fea]{gap:20px}.symbol-select[data-v-211c2fea]{width:220px}.symbol-select[data-v-211c2fea] .ant-select-selection{background-color:#fff;border:1px solid #e8e8e8;color:#333;border-radius:4px;-webkit-box-shadow:none;box-shadow:none}.symbol-select[data-v-211c2fea] .ant-select-selection:hover{border-color:#1890ff}.symbol-select[data-v-211c2fea] .ant-select-focused .ant-select-selection{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.symbol-select[data-v-211c2fea] .ant-select-arrow,.symbol-select[data-v-211c2fea] .ant-select-selection__placeholder{color:#999}.timeframe-group[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f0f2f5;border-radius:4px;padding:2px}.timeframe-item[data-v-211c2fea]{padding:4px 12px;font-size:13px;font-weight:600;color:#666;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-radius:4px}.timeframe-item[data-v-211c2fea]:hover{color:#1890ff;background:#fff}.timeframe-item.active[data-v-211c2fea]{color:#1890ff;background:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.current-symbol[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:24px}.symbol-info[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.symbol-label[data-v-211c2fea]{font-size:16px;font-weight:700;color:#333;line-height:1.2}.market-tag[data-v-211c2fea]{font-size:10px;color:#666;background:#f0f2f5;padding:1px 4px;border-radius:2px;margin-top:2px}.price-info[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.price-info.color-up[data-v-211c2fea]{color:#0ecb81}.price-info.color-down[data-v-211c2fea]{color:#f6465d}.symbol-price[data-v-211c2fea]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace;line-height:1.2}.symbol-change[data-v-211c2fea]{font-size:12px}.mobile-symbol-price[data-v-211c2fea]{display:none}.panel-header .theme-switcher[data-v-211c2fea]{margin-left:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.panel-header .realtime-toggle-btn[data-v-211c2fea],.panel-header .theme-toggle-btn[data-v-211c2fea]{color:#666;border:none;padding:4px 8px;-webkit-transition:all .3s;transition:all .3s;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:4px;min-width:32px;height:32px}.panel-header .realtime-toggle-btn[data-v-211c2fea]:hover,.panel-header .theme-toggle-btn[data-v-211c2fea]:hover{color:#1890ff;background:#f0f2f5}.panel-header .realtime-toggle-btn.active[data-v-211c2fea],.panel-header .theme-toggle-btn.active[data-v-211c2fea]{color:#1890ff;background:#e6f7ff}.panel-header .realtime-toggle-btn .anticon[data-v-211c2fea],.panel-header .theme-toggle-btn .anticon[data-v-211c2fea]{font-size:16px}.chart-content[data-v-211c2fea]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:100%;max-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-content[data-v-211c2fea],.chart-main-row[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;width:100%}.chart-main-row[data-v-211c2fea]{height:80vh!important;min-height:500px!important;max-height:80vh!important;-ms-flex-negative:0;flex-shrink:0}.chart-right[data-v-211c2fea]{width:30%!important;-webkit-box-flex:0!important;-ms-flex:0 0 30%!important;flex:0 0 30%!important;border-left:1px solid #e8e8e8}.chart-right[data-v-211c2fea],.indicators-panel[data-v-211c2fea]{background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicators-panel[data-v-211c2fea]{height:100%}.panel-header[data-v-211c2fea]{height:48px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;border-bottom:1px solid #e8e8e8;font-weight:600;color:#333;background:#fff}.panel-header .mobile-header-create-btn[data-v-211c2fea]{margin-right:0}.panel-body[data-v-211c2fea]{padding:0;overflow:hidden}.indicator-section[data-v-211c2fea],.panel-body[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicator-section[data-v-211c2fea]{min-height:0;border-bottom:1px solid #e8e8e8}.indicator-section[data-v-211c2fea]:last-child{border-bottom:none}.indicator-section.section-empty[data-v-211c2fea]{min-height:200px}.section-label[data-v-211c2fea]{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;background:#fafafa;border-bottom:1px solid #e8e8e8;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.section-label .section-label-left[data-v-211c2fea],.section-label[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.section-label .section-label-left[data-v-211c2fea]{gap:8px;-webkit-box-flex:1;-ms-flex:1;flex:1}.section-label .section-label-left .collapse-icon[data-v-211c2fea]{font-size:12px;color:#999;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.section-label .section-label-left span[data-v-211c2fea]{font-weight:500}.section-label .buy-indicator-btn[data-v-211c2fea]{padding:0;height:auto;margin-left:8px}.create-indicator-btn[data-v-211c2fea]{margin-left:auto;margin-right:0}@media (max-width:768px){.create-indicator-btn[data-v-211c2fea]{display:none!important}}.section-content[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px 16px;min-height:0}.indicator-card[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;padding:10px 12px;border-radius:6px;margin-bottom:8px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:1px solid #e8e8e8}.indicator-card[data-v-211c2fea]:hover{background:#f0f2f5;border-color:#1890ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.05);box-shadow:0 2px 4px rgba(0,0,0,.05)}.indicator-card.active[data-v-211c2fea]{background:#e6f7ff;border-color:#1890ff}.indicator-card.active .card-name[data-v-211c2fea]{color:#1890ff}.indicator-card.indicator-active[data-v-211c2fea]{border-color:#52c41a;border-width:2px;background:#f6ffed}.indicator-card.indicator-active[data-v-211c2fea]:hover{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.2);box-shadow:0 2px 8px rgba(82,196,26,.2)}.indicator-card.indicator-active .card-name[data-v-211c2fea]{color:#52c41a}.indicator-card.disabled[data-v-211c2fea]{opacity:.5;cursor:not-allowed}.indicator-card.disabled[data-v-211c2fea]:hover{-webkit-transform:none;transform:none;background:#fff;border-color:#e8e8e8;-webkit-box-shadow:none;box-shadow:none}.card-content[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.card-header[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:4px}.card-name[data-v-211c2fea]{font-size:13px;color:#333;font-weight:500;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-right:8px}.card-params[data-v-211c2fea]{font-size:11px;color:#999;margin-top:2px}.card-desc[data-v-211c2fea]{font-size:11px;color:#999;margin-top:0;display:-webkit-box;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.4;min-height:1.4em;max-height:2.8em}.card-action[data-v-211c2fea]{color:#999;font-size:12px}.card-action[data-v-211c2fea]:hover{color:#1890ff}.card-actions[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;-ms-flex-negative:0;flex-shrink:0}.action-icon[data-v-211c2fea]{font-size:16px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;color:#999}.action-icon.edit-icon[data-v-211c2fea]{color:#1890ff}.action-icon.edit-icon[data-v-211c2fea]:hover{color:#40a9ff}.action-icon.delete-icon[data-v-211c2fea]{color:#ff4d4f}.action-icon.delete-icon[data-v-211c2fea]:hover{color:#ff7875}.action-icon[data-v-211c2fea]:hover{color:#1890ff}.action-icon.toggle-icon.active[data-v-211c2fea]{color:#52c41a}.action-icon.backtest-icon[data-v-211c2fea]{color:#722ed1}.action-icon.backtest-icon[data-v-211c2fea]:hover{color:#9254de}.action-icon.backtest-history-icon[data-v-211c2fea]{color:#13c2c2}.action-icon.backtest-history-icon[data-v-211c2fea]:hover{color:#08979c}.action-icon.publish-icon[data-v-211c2fea]{color:#1890ff}.action-icon.publish-icon[data-v-211c2fea]:hover{color:#40a9ff}.action-icon.publish-icon.published[data-v-211c2fea]{color:#52c41a}.action-icon.publish-icon.published[data-v-211c2fea]:hover{color:#73d13d}.action-icon.status-icon.status-normal[data-v-211c2fea]{color:#52c41a}.action-icon.status-icon.status-expired[data-v-211c2fea]{color:#ff4d4f}.action-icon.expiry-icon[data-v-211c2fea]{color:#1890ff}.empty-indicators[data-v-211c2fea]{padding:40px 20px;gap:8px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.empty-indicators[data-v-211c2fea],.loading-indicators[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#999;font-size:13px}.loading-indicators[data-v-211c2fea]{padding:20px}.custom-scrollbar[data-v-211c2fea]{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar[data-v-211c2fea]::-webkit-scrollbar{display:none;width:0;height:0}.dark-dropdown{background-color:#fff;border:1px solid #e8e8e8;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.dark-dropdown .ant-select-dropdown-menu-item{color:#333}.dark-dropdown .ant-select-dropdown-menu-item:hover{background-color:#f0f2f5}.dark-dropdown .ant-select-dropdown-menu-item-active{background-color:#e6f7ff;color:#1890ff}.dark-dropdown .ant-empty-description{color:#999}.symbol-option[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.symbol-option .symbol-name[data-v-211c2fea]{font-weight:600;color:#8f8d8d;margin-right:8px}.symbol-option .symbol-name-extra[data-v-211c2fea]{font-size:12px;color:#999;margin-left:4px}.empty-watchlist-hint[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#666;font-size:12px}@media (max-width:768px){.chart-container[data-v-211c2fea]{padding:0;width:calc(100% + 44px)!important;margin:-22px}.chart-header[data-v-211c2fea]{padding:12px}.chart-header .header-top[data-v-211c2fea],.chart-header[data-v-211c2fea]{gap:12px;height:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-header .header-top[data-v-211c2fea]{padding:0}.chart-header .header-left[data-v-211c2fea]{width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.chart-header .search-section[data-v-211c2fea]{width:100%}.chart-header .search-section .symbol-select[data-v-211c2fea]{width:100%!important}.chart-header .timeframe-group[data-v-211c2fea]{width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.chart-header .timeframe-group .timeframe-item[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:calc(14.28% - 4px);text-align:center;padding:6px 8px;font-size:12px}.chart-header .current-symbol[data-v-211c2fea]{display:none}.chart-content[data-v-211c2fea]{overflow-y:auto}.chart-content[data-v-211c2fea],.chart-main-row[data-v-211c2fea]{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important;height:auto!important;min-height:auto!important;max-height:none!important}.mobile-symbol-price[data-v-211c2fea]{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 16px;background:#fff;width:100%}.mobile-symbol-price .mobile-price-info[data-v-211c2fea],.mobile-symbol-price[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mobile-symbol-price .mobile-price-info[data-v-211c2fea]{gap:12px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.mobile-symbol-price .mobile-price-info.color-up[data-v-211c2fea]{color:#0ecb81}.mobile-symbol-price .mobile-price-info.color-down[data-v-211c2fea]{color:#f6465d}.mobile-symbol-price .mobile-price-info .mobile-symbol-price[data-v-211c2fea]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace}.mobile-symbol-price .mobile-price-info .mobile-symbol-change[data-v-211c2fea]{font-size:14px;font-weight:500}kline-chart[data-v-211c2fea]{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important;width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;display:block!important;margin-bottom:0!important}kline-chart[data-v-211c2fea] .chart-left{width:100%!important;height:350px!important;min-height:350px!important;max-height:350px!important;border-right:none!important;border-bottom:1px solid #e8e8e8!important}.chart-right[data-v-211c2fea]{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;width:100%!important;min-width:100%!important;max-width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;height:auto!important;max-height:calc(100vh - 470px)!important;border-left:none!important;border-top:none!important;margin-top:0!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;visibility:visible!important;opacity:1!important}.chart-right .indicators-panel[data-v-211c2fea]{height:auto!important;min-height:600px!important;max-height:calc(100vh - 410px)!important;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .panel-header[data-v-211c2fea]{position:sticky;top:0;background:#fff;z-index:10;border-bottom:1px solid #e8e8e8;padding:12px;font-size:14px;-ms-flex-negative:0;flex-shrink:0}.chart-right .indicators-panel .panel-header .mobile-header-create-btn[data-v-211c2fea]{margin-right:0;font-size:12px;height:28px;padding:0 12px}.chart-right .indicators-panel .panel-body[data-v-211c2fea]{padding:0;overflow:visible;min-height:400px!important}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea],.chart-right .indicators-panel .panel-body[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea]{overflow:hidden;min-height:0;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-bar{margin-bottom:0;-ms-flex-negative:0;flex-shrink:0;border-bottom:1px solid #e8e8e8}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab{color:#666;font-size:14px}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab-active{color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-ink-bar{background-color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-content{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tabpane{height:100%;overflow:hidden;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tabpane-active{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;height:100%;overflow:hidden}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-211c2fea],.chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-content-holder{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-211c2fea]{width:100%}.chart-right .indicators-panel .mobile-indicator-tabs .section-content[data-v-211c2fea]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto!important;overflow-x:hidden;padding:12px;min-height:0;height:100%;-webkit-overflow-scrolling:touch;position:relative}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-211c2fea],.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn[data-v-211c2fea]{display:none!important}.chart-right .indicators-panel .indicator-section .section-label[data-v-211c2fea]{padding:10px 12px;font-size:13px}.chart-right .indicators-panel .section-content[data-v-211c2fea]{padding:10px 12px}.chart-right .indicators-panel .indicator-card[data-v-211c2fea]{padding:10px}.chart-right .indicators-panel .indicator-card .card-name[data-v-211c2fea]{font-size:13px}.chart-right .indicators-panel .indicator-card .card-desc[data-v-211c2fea],.chart-right .indicators-panel .indicator-card .card-params[data-v-211c2fea]{font-size:11px}}.qt-header-btn[data-v-211c2fea]{margin-left:16px;background:linear-gradient(135deg,#1890ff,#722ed1);border:none;color:#fff;border-radius:6px;font-weight:600;font-size:12px;padding:0 12px;height:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;-webkit-box-shadow:0 2px 8px rgba(24,144,255,.3);box-shadow:0 2px 8px rgba(24,144,255,.3);-webkit-transition:all .3s;transition:all .3s}.qt-header-btn[data-v-211c2fea]:focus,.qt-header-btn[data-v-211c2fea]:hover{background:linear-gradient(135deg,#40a9ff,#9254de);color:#fff;-webkit-box-shadow:0 4px 12px rgba(24,144,255,.45);box-shadow:0 4px 12px rgba(24,144,255,.45);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.qt-floating-btn[data-v-211c2fea]{position:fixed;right:24px;bottom:80px;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:999;-webkit-transition:all .3s;transition:all .3s;font-size:22px}.qt-floating-btn[data-v-211c2fea]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(24,144,255,.55);box-shadow:0 6px 24px rgba(24,144,255,.55)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark[data-v-211c2fea],body.dark,body.realdark{background:#141414;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.3);box-shadow:0 2px 4px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .symbol-label[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .market-tag[data-v-211c2fea],body.dark,body.realdark{color:#888;background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-up[data-v-211c2fea],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-down[data-v-211c2fea],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-211c2fea],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 2px 8px rgba(23,125,220,.35);box-shadow:0 2px 8px rgba(23,125,220,.35)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-211c2fea]:focus,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-211c2fea]:hover,body.dark,body.realdark{background:linear-gradient(135deg,#3c9ae8,#854eca);-webkit-box-shadow:0 4px 12px rgba(23,125,220,.5);box-shadow:0 4px 12px rgba(23,125,220,.5)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-211c2fea],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 4px 16px rgba(23,125,220,.45);box-shadow:0 4px 16px rgba(23,125,220,.45)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-211c2fea]:hover,body.dark,body.realdark{-webkit-box-shadow:0 6px 24px rgba(23,125,220,.6);box-shadow:0 6px 24px rgba(23,125,220,.6)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection,body.dark,body.realdark{background-color:#1c1c1c;border-color:#2a2a2a;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection:hover,body.dark,body.realdark{border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-focused .ant-select-selection,body.dark,body.realdark{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.3);box-shadow:0 0 0 2px rgba(24,144,255,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-arrow,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection__placeholder,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group[data-v-211c2fea],body.dark,body.realdark{background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff;background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item.active[data-v-211c2fea],body.dark,body.realdark{color:#1890ff;background:#1c1c1c;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-211c2fea],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-211c2fea],body.dark,body.realdark{color:#888;background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-211c2fea],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-211c2fea],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-left-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn.active[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff;background:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-body[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-section[data-v-211c2fea],body.dark,body.realdark{border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label[data-v-211c2fea],body.dark,body.realdark{color:#868993;background:#2a2a2a;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left .collapse-icon[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left span[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-211c2fea],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-211c2fea]:hover,body.dark,body.realdark{background:#2a2a2a;border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active .card-name[data-v-211c2fea],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-211c2fea],body.dark,body.realdark{border-color:#52c41a;background:#1e3a1e}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-211c2fea]:hover,body.dark,body.realdark{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.3);box-shadow:0 2px 8px rgba(82,196,26,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active .card-name[data-v-211c2fea],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-name[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-desc[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-params[data-v-211c2fea],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-211c2fea],body.dark,body.realdark{color:#ff4d4f}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#ff7875}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-211c2fea],body.dark,body.realdark{color:#b37feb}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#d3adf7}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-211c2fea],body.dark,body.realdark{color:#5cdbd3}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#87e8de}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-211c2fea],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-211c2fea],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-211c2fea]:hover,body.dark,body.realdark{color:#73d13d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.toggle-icon.active[data-v-211c2fea],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .empty-indicators[data-v-211c2fea],body.dark,body.realdark{color:#868993}@media (max-width:768px){.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .current-symbol[data-v-211c2fea],body.dark,body.realdark{border-top-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-left[data-v-211c2fea],body.dark,body.realdark{border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-211c2fea],body.dark,body.realdark{border-top-color:#2a2a2a;max-height:500px!important}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-bar,body.dark,body.realdark{border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-tab-active,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-211c2fea] .ant-tabs-ink-bar,body.dark,body.realdark{background-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-211c2fea],body.dark,body.realdark{background:#1c1c1c;border-bottom-color:#2a2a2a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-211c2fea],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-211c2fea],body.dark,body.realdark{color:#868993;background:#2a3932}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-211c2fea],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-211c2fea],body.dark,body.realdark{color:#f6465d}}.add-stock-modal-content .market-tabs[data-v-211c2fea]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-211c2fea],.add-stock-modal-content .search-results-section[data-v-211c2fea],.add-stock-modal-content .symbol-search-section[data-v-211c2fea]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-211c2fea],.add-stock-modal-content .search-results-section .section-title[data-v-211c2fea]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-211c2fea]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-211c2fea]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-211c2fea]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-211c2fea]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-211c2fea]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-211c2fea]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.chart-container.theme-dark .add-stock-modal-content .hot-symbols-section .section-title[data-v-211c2fea],.chart-container.theme-dark .add-stock-modal-content .search-results-section .section-title[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list[data-v-211c2fea],body.dark,body.realdark{border-color:#363c4e;background-color:#2a2a2a}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item[data-v-211c2fea]:hover,body.dark,body.realdark{background-color:#363c4e}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-211c2fea],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-211c2fea],body.dark,body.realdark{color:#868993}.params-config-modal .indicator-info[data-v-211c2fea]{text-align:center;margin-bottom:8px}.params-config-modal .indicator-info .indicator-name[data-v-211c2fea]{font-size:16px;font-weight:600;color:#1f1f1f}.params-config-modal .params-form .param-item[data-v-211c2fea]{margin-bottom:16px}.params-config-modal .params-form .param-item .param-header[data-v-211c2fea]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:6px}.params-config-modal .params-form .param-item .param-header .param-label[data-v-211c2fea]{font-weight:500;color:#333}.theme-dark .params-config-modal .indicator-info .indicator-name[data-v-211c2fea]{color:#e0e0e0}.theme-dark .params-config-modal .params-form .param-item .param-header .param-label[data-v-211c2fea]{color:#d0d0d0} \ No newline at end of file diff --git a/frontend/dist/css/645.20e2b587.css b/frontend/dist/css/645.20e2b587.css deleted file mode 100644 index b52c133..0000000 --- a/frontend/dist/css/645.20e2b587.css +++ /dev/null @@ -1 +0,0 @@ -.settings-page[data-v-20857e25]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.settings-page .restart-alert[data-v-20857e25]{margin-bottom:16px;border-radius:8px}.settings-page .settings-header[data-v-20857e25]{margin-bottom:24px}.settings-page .settings-header .page-title[data-v-20857e25]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.settings-page .settings-header .page-title .anticon[data-v-20857e25]{font-size:28px;color:#1890ff}.settings-page .settings-header .page-desc[data-v-20857e25]{color:#64748b;font-size:14px;margin:0}.settings-page .settings-content[data-v-20857e25]{margin-bottom:80px}.settings-page .openrouter-balance-card[data-v-20857e25]{margin-bottom:20px}.settings-page .openrouter-balance-card .ant-card[data-v-20857e25]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border:1px solid #91d5ff;border-radius:8px}.settings-page .openrouter-balance-card .balance-header[data-v-20857e25]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:12px}.settings-page .openrouter-balance-card .balance-header .balance-title[data-v-20857e25]{font-size:15px;font-weight:600;color:#1890ff}.settings-page .openrouter-balance-card .balance-info[data-v-20857e25]{padding:8px 0}.settings-page .openrouter-balance-card .balance-info[data-v-20857e25] .ant-statistic-title{font-size:12px;color:#666}.settings-page .openrouter-balance-card .balance-info[data-v-20857e25] .ant-statistic-content{font-size:18px}.settings-page .openrouter-balance-card .balance-info .free-tier-badge[data-v-20857e25]{margin-top:12px;text-align:right}.settings-page .openrouter-balance-card .balance-empty[data-v-20857e25]{color:#8c8c8c;font-size:13px;padding:8px 0}.settings-page .settings-collapse[data-v-20857e25]{background:transparent}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item{margin-bottom:16px;border:none;border-radius:12px;overflow:hidden;background:#fff;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header{font-size:16px;font-weight:600;color:#1e3a5f;padding:16px 24px;padding-left:48px;background:linear-gradient(135deg,#fff,#f8fafc);border-bottom:1px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .ant-collapse-arrow{color:#1890ff;left:20px}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{font-size:18px;color:#1890ff}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{font-size:16px}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content{border-top:none}.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{padding:24px}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label{padding-bottom:4px}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label label{color:#475569;font-weight:500}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-ms-flex-wrap:wrap;flex-wrap:wrap}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .label-text{color:#475569;font-weight:500}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon{font-size:14px;color:#94a3b8;cursor:help;-webkit-transition:color .2s;transition:color .2s}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#1890ff}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link{font-size:12px;font-weight:400;color:#1890ff;text-decoration:none;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:2px 8px;background:rgba(24,144,255,.08);border-radius:4px;-webkit-transition:all .2s;transition:all .2s;margin-left:4px}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.15);color:#0076e4}.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link .anticon{font-size:11px}.settings-page .settings-form[data-v-20857e25] .ant-input,.settings-page .settings-form[data-v-20857e25] .ant-input-number,.settings-page .settings-form[data-v-20857e25] .ant-select-selection{border-radius:8px}.settings-page .settings-form[data-v-20857e25] .ant-input-number{width:100%}.settings-page .settings-form .password-field .field-hint[data-v-20857e25]{margin-top:4px;font-size:12px;color:#52c41a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.settings-page .settings-form .field-default[data-v-20857e25]{margin-top:4px;font-size:12px;color:#94a3b8}.settings-page .settings-footer[data-v-20857e25]{position:fixed;bottom:0;left:208px;right:0;padding:16px 24px;background:#fff;-webkit-box-shadow:0 -4px 20px rgba(0,0,0,.08);box-shadow:0 -4px 20px rgba(0,0,0,.08);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px;z-index:100}.settings-page .settings-footer .ant-btn[data-v-20857e25]{min-width:100px;height:40px;border-radius:8px;font-weight:500}.settings-page.theme-dark[data-v-20857e25]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.settings-page.theme-dark .restart-alert[data-v-20857e25]{background:#2d333b;border-color:#b08800}.settings-page.theme-dark .settings-header .page-title[data-v-20857e25]{color:#e0e6ed}.settings-page.theme-dark .settings-header .page-desc[data-v-20857e25]{color:#8b949e}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header{background:linear-gradient(135deg,#252a36,#1e222d);color:#e0e6ed;border-bottom-color:hsla(0,0%,100%,.06)}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{color:#58a6ff}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{color:#e0e6ed}.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content,.settings-page.theme-dark .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{background:#1e222d}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .label-text,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label label{color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon{color:#6e7681}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link{background:rgba(24,144,255,.15);color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.25)}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection{background:#0d1117;border-color:#30363d;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection:hover{border-color:#1890ff}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number-input{background:transparent;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-arrow{color:#8b949e}.settings-page.theme-dark .settings-form .field-default[data-v-20857e25]{color:#6e7681}.settings-page.theme-dark .settings-footer[data-v-20857e25]{background:#1e222d;border-top:1px solid hsla(0,0%,100%,.06);-webkit-box-shadow:0 -4px 24px rgba(0,0,0,.25);box-shadow:0 -4px 24px rgba(0,0,0,.25)}@media (max-width:768px){.settings-page[data-v-20857e25]{padding:16px}.settings-page .settings-footer[data-v-20857e25]{left:0;padding:12px 16px}} \ No newline at end of file diff --git a/frontend/dist/css/662.ff086137.css b/frontend/dist/css/662.ff086137.css new file mode 100644 index 0000000..cd4ae9d --- /dev/null +++ b/frontend/dist/css/662.ff086137.css @@ -0,0 +1 @@ +.fast-analysis-report[data-v-75da11ec]{height:100%;overflow-y:auto;padding:20px;background:linear-gradient(135deg,#f5f7fa,#e4e8ec);border-radius:12px}.fast-analysis-report .loading-container[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px;background:#fff;border-radius:12px}.fast-analysis-report .loading-container .loading-content-pro[data-v-75da11ec]{width:100%;max-width:400px;padding:40px}.fast-analysis-report .loading-container .loading-content-pro .loading-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:12px;margin-bottom:32px}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-icon-pro[data-v-75da11ec]{font-size:28px;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-title[data-v-75da11ec]{font-size:20px;font-weight:600;color:#1e293b}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper[data-v-75da11ec]{margin-bottom:24px;position:relative}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper .progress-text[data-v-75da11ec]{position:absolute;right:0;top:-24px;font-size:14px;font-weight:600;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .current-step[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px;padding:12px 20px;background:#f0f5ff;border-radius:8px;margin-bottom:24px;color:#1890ff;font-size:14px;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .current-step .anticon[data-v-75da11ec]{font-size:16px}.fast-analysis-report .loading-container .loading-content-pro .steps-list[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:10px 16px;background:#f8fafc;border-radius:8px;font-size:13px;color:#94a3b8;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-dot[data-v-75da11ec]{width:8px;height:8px;border-radius:50%;background:#e2e8f0;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-text[data-v-75da11ec]{-webkit-box-flex:1;-ms-flex:1;flex:1}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-check[data-v-75da11ec]{color:#52c41a;font-size:14px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active[data-v-75da11ec]{background:#e6f7ff;color:#1890ff;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active .step-dot[data-v-75da11ec]{background:#1890ff;-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.2);box-shadow:0 0 0 3px rgba(24,144,255,.2)}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done[data-v-75da11ec]{background:#f6ffed;color:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done .step-dot[data-v-75da11ec]{background:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .loading-footer[data-v-75da11ec]{margin-top:24px;text-align:center}.fast-analysis-report .loading-container .loading-content-pro .loading-footer .elapsed-time[data-v-75da11ec]{font-size:13px;color:#94a3b8;font-family:SF Mono,Monaco,monospace}.fast-analysis-report .empty-container[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px}.fast-analysis-report .empty-container .empty-content[data-v-75da11ec]{text-align:center}.fast-analysis-report .empty-container .empty-content .empty-icon[data-v-75da11ec]{font-size:64px;color:#d9d9d9}.fast-analysis-report .empty-container .empty-content .empty-title[data-v-75da11ec]{margin-top:16px;font-size:18px;font-weight:600;color:#262626}.fast-analysis-report .empty-container .empty-content .empty-hint[data-v-75da11ec]{margin-top:8px;color:#8c8c8c}.fast-analysis-report .result-container .decision-card[data-v-75da11ec]{background:#fff;border-radius:16px;padding:24px;margin-bottom:20px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.08);box-shadow:0 4px 12px rgba(0,0,0,.08);border-left:6px solid #1890ff}.fast-analysis-report .result-container .decision-card.decision-buy[data-v-75da11ec]{border-left-color:#52c41a;background:linear-gradient(135deg,#f6ffed,#fff)}.fast-analysis-report .result-container .decision-card.decision-sell[data-v-75da11ec]{border-left-color:#ff4d4f;background:linear-gradient(135deg,#fff2f0,#fff)}.fast-analysis-report .result-container .decision-card.decision-hold[data-v-75da11ec]{border-left-color:#faad14;background:linear-gradient(135deg,#fffbe6,#fff)}.fast-analysis-report .result-container .decision-card .decision-main[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:16px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .anticon[data-v-75da11ec]{font-size:32px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .decision-text[data-v-75da11ec]{font-size:36px;font-weight:800;letter-spacing:2px}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring[data-v-75da11ec]{text-align:center}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-value[data-v-75da11ec]{font-size:18px;font-weight:700}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-label[data-v-75da11ec]{font-size:12px;color:#8c8c8c;margin-top:4px}.fast-analysis-report .result-container .decision-card .decision-summary[data-v-75da11ec]{font-size:16px;line-height:1.6;color:#595959;padding-top:16px;border-top:1px dashed #e8e8e8}.fast-analysis-report .result-container .decision-card .consensus-strip[data-v-75da11ec]{margin-top:14px;padding:12px 14px;border-radius:8px;background:rgba(24,144,255,.06);border:1px solid rgba(24,144,255,.2);font-size:13px;color:#434343}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:8px;color:#1890ff}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:12px 20px}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-75da11ec]{font-style:normal;color:#8c8c8c;margin-right:6px}.fast-analysis-report .result-container .price-info-row[data-v-75da11ec]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .price-info-row .price-card[data-v-75da11ec]{background:#fff;border-radius:12px;padding:16px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .price-info-row .price-card .price-label[data-v-75da11ec]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .price-info-row .price-card .price-value[data-v-75da11ec]{font-size:18px;font-weight:700;color:#262626}.fast-analysis-report .result-container .price-info-row .price-card .price-value.positive[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-value.negative[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card .price-hint[data-v-75da11ec]{font-size:10px;color:#bfbfbf;margin-top:6px;cursor:help}.fast-analysis-report .result-container .price-info-row .price-card .price-hint .anticon[data-v-75da11ec]{margin-right:2px}.fast-analysis-report .result-container .price-info-row .price-card .price-change[data-v-75da11ec]{font-size:14px;margin-top:4px;font-weight:600}.fast-analysis-report .result-container .price-info-row .price-card .price-change.positive[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-change.negative[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.current[data-v-75da11ec]{border-top:3px solid #1890ff}.fast-analysis-report .result-container .price-info-row .price-card.entry[data-v-75da11ec]{border-top:3px solid #722ed1}.fast-analysis-report .result-container .price-info-row .price-card.stop[data-v-75da11ec]{border-top:3px solid #ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.target[data-v-75da11ec]{border-top:3px solid #52c41a}.fast-analysis-report .result-container .trend-outlook-card[data-v-75da11ec]{background:#fff;border-radius:12px;padding:16px 20px;margin-bottom:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06);border-left:4px solid #722ed1}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:15px;font-weight:600;color:#262626;margin-bottom:10px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-header .anticon[data-v-75da11ec]{color:#722ed1}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-summary[data-v-75da11ec]{font-size:13px;line-height:1.65;color:#595959;margin-bottom:14px;padding:10px 12px;background:#fafafa;border-radius:8px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-grid[data-v-75da11ec]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item[data-v-75da11ec]{background:#fafafa;border-radius:8px;padding:10px 12px;text-align:center}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-label[data-v-75da11ec]{font-size:11px;color:#8c8c8c;margin-bottom:6px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend[data-v-75da11ec]{font-size:14px;font-weight:700;margin-bottom:6px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend.trend-bull[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend.trend-bear[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend.trend-neutral[data-v-75da11ec]{color:#faad14}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-meta[data-v-75da11ec]{font-size:11px;color:#8c8c8c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px}@media (max-width:992px){.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-grid[data-v-75da11ec]{grid-template-columns:repeat(2,1fr)}}@media (max-width:576px){.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-grid[data-v-75da11ec]{grid-template-columns:1fr}}.fast-analysis-report .result-container .scores-row[data-v-75da11ec]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .scores-row .score-item[data-v-75da11ec]{background:#fff;border-radius:12px;padding:16px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .scores-row .score-item .score-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .scores-row .score-item .score-header .anticon[data-v-75da11ec]{color:#1890ff}.fast-analysis-report .result-container .scores-row .score-item .score-value[data-v-75da11ec]{text-align:right;font-size:20px;font-weight:700;color:#262626;margin-top:8px}.fast-analysis-report .result-container .scores-row .score-item.overall[data-v-75da11ec]{background:linear-gradient(135deg,#e6f7ff,#fff);border:1px solid #91d5ff}.fast-analysis-report .result-container .detailed-analysis[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card[data-v-75da11ec]{background:linear-gradient(135deg,#fff,#fafafa);border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.06);box-shadow:0 2px 12px rgba(0,0,0,.06);border-left:4px solid #1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.technical[data-v-75da11ec]{border-left-color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.fundamental[data-v-75da11ec]{border-left-color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card.sentiment[data-v-75da11ec]{border-left-color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;margin-bottom:14px;font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header .anticon[data-v-75da11ec]{font-size:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.technical .anticon[data-v-75da11ec]{color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.fundamental .anticon[data-v-75da11ec]{color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.sentiment .anticon[data-v-75da11ec]{color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-content[data-v-75da11ec]{font-size:14px;line-height:1.8;color:#595959;text-align:justify}.fast-analysis-report .result-container .analysis-details[data-v-75da11ec]{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.fast-analysis-report .result-container .analysis-details .detail-section[data-v-75da11ec]{background:#fff;border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .analysis-details .detail-section .section-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:16px;font-weight:600;margin-bottom:16px;color:#262626}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list[data-v-75da11ec]{list-style:none;padding:0;margin:0}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]{padding:10px 0;border-bottom:1px solid #f0f0f0;font-size:14px;line-height:1.6;color:#595959}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]:last-child{border-bottom:none}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]:before{content:"•";margin-right:8px;color:#1890ff}.fast-analysis-report .result-container .analysis-details .detail-section.reasons[data-v-75da11ec]{border-left:4px solid #52c41a}.fast-analysis-report .result-container .analysis-details .detail-section.risks[data-v-75da11ec]{border-left:4px solid #faad14}.fast-analysis-report .result-container .indicators-section[data-v-75da11ec]{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .indicators-section .section-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:8px;font-size:16px;font-weight:600;margin-bottom:10px;color:#262626}.fast-analysis-report .result-container .indicators-section .section-title .anticon[data-v-75da11ec]{color:#1890ff}.fast-analysis-report .result-container .indicators-section .section-title .indicators-pro-badge[data-v-75da11ec]{margin:0;font-size:11px;line-height:18px;font-weight:500}.fast-analysis-report .result-container .indicators-section .indicators-methodology[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;gap:8px;font-size:12px;line-height:1.55;color:#595959;margin-bottom:16px;padding:10px 12px;background:-webkit-gradient(linear,left top,right top,from(#f0f5ff),to(#fafafa));background:linear-gradient(90deg,#f0f5ff,#fafafa);border-radius:8px;border:1px solid #e6f0ff}.fast-analysis-report .result-container .indicators-section .indicators-methodology .anticon[data-v-75da11ec]{color:#2f54eb;margin-top:2px}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap[data-v-75da11ec]{margin-top:20px;padding-top:16px;border-top:1px dashed #e8e8e8}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:13px;font-weight:600;color:#434343;margin-bottom:12px}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec]{color:#722ed1}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-label[data-v-75da11ec]{font-size:12px;color:#8c8c8c;width:38%;font-weight:500}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content[data-v-75da11ec]{font-size:12px;font-family:SF Mono,Consolas,monospace}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec]{color:#52c41a;font-weight:600}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec]{color:#ff4d4f;font-weight:600}.fast-analysis-report .result-container .indicators-section .indicators-grid[data-v-75da11ec]{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item[data-v-75da11ec]{background:#fafafa;border-radius:8px;padding:12px;text-align:center}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-name[data-v-75da11ec]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value[data-v-75da11ec]{font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bullish[data-v-75da11ec],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.oversold[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bearish[data-v-75da11ec],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.high-volatility[data-v-75da11ec],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.overbought[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.low-volatility[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-signal[data-v-75da11ec]{font-size:11px;color:#8c8c8c;margin-top:4px;text-transform:capitalize}.fast-analysis-report .result-container .feedback-section[data-v-75da11ec]{background:#fff;border-radius:12px;padding:20px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .feedback-section .feedback-question[data-v-75da11ec]{font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .feedback-section .feedback-buttons[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px;margin-bottom:16px}.fast-analysis-report .result-container .feedback-section .feedback-buttons .ant-btn[data-v-75da11ec]{min-width:100px}.fast-analysis-report .result-container .feedback-section .analysis-meta[data-v-75da11ec]{font-size:12px;color:#8c8c8c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px}@media (max-width:992px){.fast-analysis-report .price-info-row[data-v-75da11ec],.fast-analysis-report .scores-row[data-v-75da11ec]{grid-template-columns:repeat(2,1fr)}.fast-analysis-report .analysis-details[data-v-75da11ec]{grid-template-columns:1fr}}@media (max-width:576px){.fast-analysis-report[data-v-75da11ec]{padding:12px}.fast-analysis-report .price-info-row[data-v-75da11ec],.fast-analysis-report .scores-row[data-v-75da11ec]{grid-template-columns:1fr}.fast-analysis-report .decision-card[data-v-75da11ec]{padding:16px}.fast-analysis-report .decision-card .decision-main[data-v-75da11ec]{gap:16px;text-align:center}.fast-analysis-report .decision-card .decision-main .decision-badge[data-v-75da11ec],.fast-analysis-report .decision-card .decision-main[data-v-75da11ec]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fast-analysis-report .decision-card .decision-main .decision-badge .decision-text[data-v-75da11ec]{font-size:28px}}.fast-analysis-report.theme-dark[data-v-75da11ec]{background:linear-gradient(135deg,#141414,#1c1c1c)}.fast-analysis-report.theme-dark .loading-content .loading-text[data-v-75da11ec]{color:#00e5ff}.fast-analysis-report.theme-dark .empty-content .empty-title[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card[data-v-75da11ec]{background:#1c1c1c;border-left-color:#1890ff}.fast-analysis-report.theme-dark .decision-card.decision-buy[data-v-75da11ec]{background:linear-gradient(135deg,rgba(82,196,26,.1),#1c1c1c)}.fast-analysis-report.theme-dark .decision-card.decision-sell[data-v-75da11ec]{background:linear-gradient(135deg,rgba(255,77,79,.1),#1c1c1c)}.fast-analysis-report.theme-dark .decision-card.decision-hold[data-v-75da11ec]{background:linear-gradient(135deg,rgba(250,173,20,.1),#1c1c1c)}.fast-analysis-report.theme-dark .decision-card .confidence-ring .confidence-value[data-v-75da11ec]{color:#e5e5e5}.fast-analysis-report.theme-dark .decision-card .confidence-ring .confidence-label[data-v-75da11ec]{color:#a3a3a3}.fast-analysis-report.theme-dark .decision-card .decision-summary[data-v-75da11ec]{color:#868993;border-top-color:#363c4e}.fast-analysis-report.theme-dark .decision-card .consensus-strip[data-v-75da11ec]{background:rgba(24,144,255,.12);border-color:rgba(24,144,255,.35);color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-title[data-v-75da11ec]{color:#69c0ff}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card[data-v-75da11ec]{background:linear-gradient(135deg,#1c1c1c,#141414)}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.technical[data-v-75da11ec]{border-left-color:#1890ff}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.fundamental[data-v-75da11ec]{border-left-color:#722ed1}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.sentiment[data-v-75da11ec]{border-left-color:#eb2f96}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-header[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-content[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .trend-outlook-card[data-v-75da11ec]{background:#1c1c1c;border-left-color:#b37feb}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-header[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-header .anticon[data-v-75da11ec]{color:#b37feb}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-summary[data-v-75da11ec]{background:#252525;color:#868993}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-item[data-v-75da11ec]{background:#252525}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-item .to-label[data-v-75da11ec],.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-item .to-meta[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detail-section[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item[data-v-75da11ec]{background:#1c1c1c;color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-methodology[data-v-75da11ec]{background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,47%,.12)),to(#252525));background:linear-gradient(90deg,hsla(0,0%,47%,.12),#252525);border-color:hsla(0,0%,71%,.2);color:#868993}.fast-analysis-report.theme-dark .detail-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-methodology .anticon[data-v-75da11ec]{color:#69c0ff}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap[data-v-75da11ec]{border-top-color:#2a2a2a}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec]{color:#b37feb}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec]{background:#1c1c1c;border-color:#2a2a2a!important;color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec]{color:#d1d4dc!important}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec]{color:#73d13d}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec]{color:#ff7875}.fast-analysis-report.theme-dark .detail-section .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .section-title[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detail-section .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .score-value[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .score-item.overall[data-v-75da11ec]{background:linear-gradient(135deg,hsla(0,0%,47%,.12),#1c1c1c);border-color:#3a3a3a}.fast-analysis-report.theme-dark .detail-list li[data-v-75da11ec]{color:#868993;border-bottom-color:#2a2a2a}.fast-analysis-report.theme-dark .indicators-grid .indicator-item[data-v-75da11ec]{background:#252525}.ai-analysis-container[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc(100vh - 120px);background:#f0f2f5;overflow:hidden;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.ai-analysis-container.embedded[data-v-5cbe52d9]{height:auto;min-height:700px;background:transparent}.ai-analysis-container.embedded .main-content-full[data-v-5cbe52d9]{-webkit-box-shadow:none;box-shadow:none;border-radius:0}.main-content-full[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden;background:#fff;border-radius:12px;height:100%;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.08);box-shadow:0 2px 8px rgba(0,0,0,.08);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.top-index-bar[data-v-5cbe52d9]{gap:8px;padding:8px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-family:SF Mono,Monaco,Consolas,monospace}.top-index-bar .indicator-box[data-v-5cbe52d9],.top-index-bar[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.top-index-bar .indicator-box[data-v-5cbe52d9]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:4px 10px;background:#fff;border-radius:6px;border:1px solid #e2e8f0;min-width:50px}.top-index-bar .indicator-box .ind-label[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;text-transform:uppercase}.top-index-bar .indicator-box .ind-value[data-v-5cbe52d9]{font-size:13px;font-weight:700;color:#1e293b}.top-index-bar .indicator-box.fear-greed.extreme-fear .ind-value[data-v-5cbe52d9]{color:#dc2626}.top-index-bar .indicator-box.fear-greed.fear .ind-value[data-v-5cbe52d9]{color:#ea580c}.top-index-bar .indicator-box.fear-greed.neutral .ind-value[data-v-5cbe52d9]{color:#ca8a04}.top-index-bar .indicator-box.fear-greed.greed .ind-value[data-v-5cbe52d9]{color:#65a30d}.top-index-bar .indicator-box.fear-greed.extreme-greed .ind-value[data-v-5cbe52d9],.top-index-bar .indicator-box.vix.low .ind-value[data-v-5cbe52d9]{color:#16a34a}.top-index-bar .indicator-box.vix.medium .ind-value[data-v-5cbe52d9]{color:#ca8a04}.top-index-bar .indicator-box.vix.high .ind-value[data-v-5cbe52d9]{color:#dc2626}.top-index-bar .indicator-box.dxy .ind-value[data-v-5cbe52d9]{color:#2563eb}.top-index-bar .indices-marquee[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-width:0}.top-index-bar .indices-marquee .marquee-track[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;-webkit-animation:marquee-5cbe52d9 35s linear infinite;animation:marquee-5cbe52d9 35s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content}.top-index-bar .indices-marquee .marquee-track[data-v-5cbe52d9]:hover{-webkit-animation-play-state:paused;animation-play-state:paused}.top-index-bar .indices-marquee .index-item[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:4px 8px;background:#fff;border-radius:4px;border:1px solid #e2e8f0;font-size:11px;white-space:nowrap}.top-index-bar .indices-marquee .index-item .idx-flag[data-v-5cbe52d9]{font-size:11px}.top-index-bar .indices-marquee .index-item .idx-symbol[data-v-5cbe52d9]{color:#64748b;font-weight:500}.top-index-bar .indices-marquee .index-item .idx-price[data-v-5cbe52d9]{color:#1e293b;font-weight:600}.top-index-bar .indices-marquee .index-item .idx-change[data-v-5cbe52d9]{font-weight:600;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1px}.top-index-bar .indices-marquee .index-item .idx-change.up[data-v-5cbe52d9]{color:#16a34a}.top-index-bar .indices-marquee .index-item .idx-change.down[data-v-5cbe52d9]{color:#dc2626}@-webkit-keyframes marquee-5cbe52d9{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes marquee-5cbe52d9{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.top-index-bar .refresh-btn[data-v-5cbe52d9]{color:#94a3b8;-ms-flex-negative:0;flex-shrink:0}.top-index-bar .refresh-btn[data-v-5cbe52d9]:hover{color:#1e293b}.main-body[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:12px;overflow:hidden;min-height:0}.left-panel[data-v-5cbe52d9],.main-body[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.left-panel[data-v-5cbe52d9]{width:280px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow-y:auto}.left-panel .heatmap-box[data-v-5cbe52d9]{background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0}.left-panel .heatmap-box .box-header[data-v-5cbe52d9]{margin-bottom:10px}.left-panel .heatmap-box .box-header[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper{font-size:10px;padding:0 6px;height:22px;line-height:20px}.left-panel .heatmap-box .box-header[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff);color:#fff}.left-panel .heatmap-box .heatmap-grid[data-v-5cbe52d9]{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.left-panel .heatmap-box .heatmap-grid .heat-cell[data-v-5cbe52d9]{padding:6px 4px;border-radius:4px;text-align:center;font-size:9px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-name[data-v-5cbe52d9]{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-price[data-v-5cbe52d9]{display:block;font-size:9px;opacity:.8;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-val[data-v-5cbe52d9]{font-weight:700;font-size:10px}.left-panel .calendar-box[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;overflow:hidden}.left-panel .calendar-box .box-header[data-v-5cbe52d9]{margin-bottom:8px}.left-panel .calendar-box .box-header .box-title[data-v-5cbe52d9]{font-size:12px;color:#64748b;font-weight:600}.left-panel .calendar-box .box-header .box-title .anticon[data-v-5cbe52d9]{margin-right:6px;color:var(--primary-color,#1890ff)}.left-panel .calendar-box .calendar-list[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.left-panel .calendar-box .calendar-list[data-v-5cbe52d9]::-webkit-scrollbar{width:4px}.left-panel .calendar-box .calendar-list[data-v-5cbe52d9]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:2px}.left-panel .calendar-box .calendar-list .cal-item[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;padding:6px 0;border-bottom:1px solid #f1f5f9;font-size:10px}.left-panel .calendar-box .calendar-list .cal-item[data-v-5cbe52d9]:last-child{border-bottom:none}.left-panel .calendar-box .calendar-list .cal-item.high[data-v-5cbe52d9]{border-left:3px solid #dc2626;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.medium[data-v-5cbe52d9]{border-left:3px solid #ca8a04;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.low[data-v-5cbe52d9]{border-left:3px solid #16a34a;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item .cal-date[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;min-width:32px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-time[data-v-5cbe52d9]{color:#64748b;min-width:36px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-flag[data-v-5cbe52d9]{font-size:12px}.left-panel .calendar-box .calendar-list .cal-item .cal-name[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;color:#334155;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.left-panel .calendar-box .calendar-list .cal-item .cal-impact[data-v-5cbe52d9]{font-weight:600;font-size:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bullish[data-v-5cbe52d9]{color:#16a34a}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bearish[data-v-5cbe52d9]{color:#dc2626}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.neutral[data-v-5cbe52d9]{color:#94a3b8}.left-panel .calendar-box .calendar-list .cal-empty[data-v-5cbe52d9]{text-align:center;color:#94a3b8;padding:20px 0;font-size:12px}.right-panel[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.right-panel .analysis-toolbar[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #f1f5f9;background:#fafafa;border-radius:8px 8px 0 0}.right-panel .analysis-toolbar .symbol-selector[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:320px}.right-panel .analysis-toolbar .analyze-button[data-v-5cbe52d9]{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)}.right-panel .analysis-toolbar .history-button[data-v-5cbe52d9]{border-color:#d9d9d9}.right-panel .analysis-main[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;padding:16px;min-height:0}.right-panel .analysis-main .analysis-placeholder[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;min-height:300px}.watchlist-panel[data-v-5cbe52d9]{width:320px;-ms-flex-negative:0;flex-shrink:0;background:#fff;border-radius:8px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.watchlist-panel .panel-header[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #f1f5f9;background:#fafafa}.watchlist-panel .panel-header .panel-title[data-v-5cbe52d9]{font-size:12px;font-weight:600;color:#64748b}.watchlist-panel .panel-header .panel-title .anticon[data-v-5cbe52d9]{color:#facc15;margin-right:6px}.watchlist-panel .watchlist-list[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:8px}.watchlist-panel .watchlist-list[data-v-5cbe52d9]::-webkit-scrollbar{width:4px}.watchlist-panel .watchlist-list[data-v-5cbe52d9]::-webkit-scrollbar-thumb{background:#e2e8f0;border-radius:2px}.watchlist-panel .watchlist-list .watchlist-empty[data-v-5cbe52d9]{text-align:center;padding:24px 12px;color:#94a3b8}.watchlist-panel .watchlist-list .watchlist-empty .anticon[data-v-5cbe52d9]{font-size:32px;margin-bottom:8px;display:block}.watchlist-panel .watchlist-list .watchlist-empty p[data-v-5cbe52d9]{font-size:12px;margin-bottom:12px}@-webkit-keyframes pulse-5cbe52d9{0%,to{opacity:1}50%{opacity:.5}}@keyframes pulse-5cbe52d9{0%,to{opacity:1}50%{opacity:.5}}@media (max-width:992px){.ai-analysis-container[data-v-5cbe52d9]{height:auto;min-height:calc(100vh - 64px);overflow-y:auto}.main-content-full[data-v-5cbe52d9]{height:auto;min-height:auto}.top-index-bar[data-v-5cbe52d9]{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:8px}.top-index-bar .indicator-box[data-v-5cbe52d9]{min-width:45px;padding:3px 6px}.top-index-bar .indices-marquee[data-v-5cbe52d9]{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10;width:100%;margin-top:8px}.main-body[data-v-5cbe52d9]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:12px}.left-panel[data-v-5cbe52d9]{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:12px}.left-panel .calendar-box[data-v-5cbe52d9],.left-panel .heatmap-box[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.left-panel .calendar-box[data-v-5cbe52d9]{max-height:200px}.right-panel .analysis-toolbar[data-v-5cbe52d9]{-ms-flex-wrap:wrap;flex-wrap:wrap}.right-panel .analysis-toolbar .symbol-selector[data-v-5cbe52d9]{width:100%!important;max-width:none!important}.right-panel .analysis-toolbar .analyze-button[data-v-5cbe52d9],.right-panel .analysis-toolbar .history-button[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1}.watchlist-panel[data-v-5cbe52d9]{width:100%;max-height:250px;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.hero-stats[data-v-5cbe52d9]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.hero-stats .hstat[data-v-5cbe52d9]{width:100%;max-width:300px;-webkit-box-flex:0;-ms-flex:none;flex:none}}.ai-analysis-container.theme-dark[data-v-5cbe52d9]{background:#0a0a0a;color:#d4d4d4}.ai-analysis-container.theme-dark .main-content-full[data-v-5cbe52d9]{background:#141414;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.5);box-shadow:0 2px 8px rgba(0,0,0,.5)}.ai-analysis-container.theme-dark .top-index-bar[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .top-index-bar .indicator-box[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-label[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-value[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-symbol[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-price[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-5cbe52d9]:hover{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-header[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-header .panel-title[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary .summary-chip[data-v-5cbe52d9]{border-right-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary .sc-num[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary .sc-label[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .batch-bar[data-v-5cbe52d9]{background:hsla(0,0%,100%,.04);border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card[data-v-5cbe52d9]:hover{background:#252525}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card.active[data-v-5cbe52d9]{background:rgba(24,144,255,.08);border-color:#1890ff}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-symbol[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-market[data-v-5cbe52d9]{color:#666;background:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-price[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-pnl-qty[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-task-badge.paused[data-v-5cbe52d9]{background:#2a2a2a;color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-task-next[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#252525));background:linear-gradient(90deg,transparent,#252525 30%)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn[data-v-5cbe52d9]{background:#1c1c1c;color:#888;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn[data-v-5cbe52d9]:hover{color:#1890ff;background:rgba(24,144,255,.1)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn.danger[data-v-5cbe52d9]:hover{color:#dc2626;background:rgba(220,38,38,.1)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card.active .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,rgba(24,144,255,.06)));background:linear-gradient(90deg,transparent,rgba(24,144,255,.06) 30%)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-empty[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .we-icon[data-v-5cbe52d9]{color:#2a2a2a}.ai-analysis-container.theme-dark .placeholder-hero .hero-bg-grid[data-v-5cbe52d9]{background-image:linear-gradient(hsla(0,0%,100%,.02) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.02) 1px,transparent 0)}.ai-analysis-container.theme-dark .placeholder-hero .hero-badge[data-v-5cbe52d9]{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.2)}.ai-analysis-container.theme-dark .placeholder-hero .hero-title[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .placeholder-hero .hero-hint[data-v-5cbe52d9],.ai-analysis-container.theme-dark .placeholder-hero .hero-subtitle[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .placeholder-hero .hstat[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a;-webkit-box-shadow:none;box-shadow:none}.ai-analysis-container.theme-dark .placeholder-hero .hstat[data-v-5cbe52d9]:hover{border-color:#1890ff;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.12);box-shadow:0 4px 16px rgba(24,144,255,.12)}.ai-analysis-container.theme-dark .placeholder-hero .hstat-icon[data-v-5cbe52d9]{background:linear-gradient(135deg,rgba(24,144,255,.12),rgba(114,46,209,.08))}.ai-analysis-container.theme-dark .placeholder-hero .hstat-val[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .placeholder-hero .hstat-label[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .placeholder-hero .hero-cta .ant-btn-primary[data-v-5cbe52d9]{-webkit-box-shadow:0 4px 14px rgba(24,144,255,.35);box-shadow:0 4px 14px rgba(24,144,255,.35)}.ai-analysis-container.theme-dark .watchlist-bar-legacy[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip.active[data-v-5cbe52d9],.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-symbol[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-price[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper{background:#141414;border-color:#2a2a2a;color:#888}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper:hover{color:#d4d4d4}.ai-analysis-container.theme-dark .left-panel .calendar-box[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .left-panel .calendar-box .box-title[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item[data-v-5cbe52d9]{border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-date[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-time[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-name[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-empty[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .right-panel[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .right-panel .analysis-toolbar[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .hero-cta .ant-btn[data-v-5cbe52d9]:not(.ant-btn-primary),.ai-analysis-container.theme-dark .right-panel .analysis-toolbar .history-button[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark .hero-cta .ant-btn[data-v-5cbe52d9]:not(.ant-btn-primary):hover{border-color:#1890ff;color:#1890ff}.ai-analysis-container.theme-dark .wl-change.up[data-v-5cbe52d9]{background:rgba(22,163,74,.15)}.ai-analysis-container.theme-dark .wl-change.down[data-v-5cbe52d9]{background:rgba(220,38,38,.12)}.ai-analysis-container.theme-dark .panel-header-icon[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .panel-header-icon[data-v-5cbe52d9]:hover{color:#1890ff;background:rgba(24,144,255,.08)}.ai-analysis-container.theme-dark .panel-summary[data-v-5cbe52d9]{background:#141414}.ai-analysis-container.theme-dark .batch-bar[data-v-5cbe52d9]{background:hsla(0,0%,100%,.03)!important;border-bottom-color:#2a2a2a!important}.ai-analysis-container.theme-dark .watchlist-bar-compat[data-v-5cbe52d9]{background:#141414;border-top-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-compat .bar-label[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip.active[data-v-5cbe52d9],.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-symbol[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-price[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-remove[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .symbol-selector .ant-select-selection{background-color:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-bar{border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab{color:#888}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab:hover{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab-active{color:#1890ff!important}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-ink-bar{background-color:#1890ff}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::-webkit-input-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::-moz-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input:-ms-input-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::-ms-input-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input-number{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input-number .ant-input-number-handler-wrap{background:#1c1c1c}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-select-selection{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-select-arrow{color:#666}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-checkbox-wrapper,.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-form-item-label>label,.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-radio-wrapper{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-btn-default:hover{border-color:#1890ff;color:#1890ff}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-alert{background:rgba(24,144,255,.06);border-color:#2a2a2a}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-alert-message{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tag{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-list-item{border-bottom-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-list-item-meta-title{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-list-item-meta-description{color:#888}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-empty-description{color:#666}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tooltip-inner{background:#1c1c1c}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-badge-count{-webkit-box-shadow:0 0 0 1px #141414;box-shadow:0 0 0 1px #141414}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-popover-inner{background:#1c1c1c}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-popover-message{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-popover-arrow{border-color:#1c1c1c}.placeholder-hero[data-v-5cbe52d9]{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;overflow:hidden}.hero-bg[data-v-5cbe52d9]{position:absolute;inset:0;pointer-events:none}.hero-bg-circle[data-v-5cbe52d9]{position:absolute;border-radius:50%;opacity:.5}.hero-bg-circle.c1[data-v-5cbe52d9]{width:320px;height:320px;top:-80px;right:-60px;background:radial-gradient(circle,rgba(24,144,255,.1) 0,transparent 70%);-webkit-animation:hero-float-5cbe52d9 6s ease-in-out infinite;animation:hero-float-5cbe52d9 6s ease-in-out infinite}.hero-bg-circle.c2[data-v-5cbe52d9]{width:240px;height:240px;bottom:-40px;left:-40px;background:radial-gradient(circle,rgba(114,46,209,.08) 0,transparent 70%);animation:hero-float-5cbe52d9 8s ease-in-out infinite reverse}.hero-bg-grid[data-v-5cbe52d9]{position:absolute;inset:0;background-image:linear-gradient(rgba(24,144,255,.03) 1px,transparent 0),linear-gradient(90deg,rgba(24,144,255,.03) 1px,transparent 0);background-size:32px 32px}@-webkit-keyframes hero-float-5cbe52d9{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-12px);transform:translateY(-12px)}}@keyframes hero-float-5cbe52d9{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-12px);transform:translateY(-12px)}}.hero-body[data-v-5cbe52d9]{position:relative;text-align:center;padding:40px 32px;max-width:560px}.hero-badge[data-v-5cbe52d9]{display:inline-block;padding:3px 12px;border-radius:20px;font-size:10px;font-weight:700;letter-spacing:1.5px;color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08);border:1px solid rgba(24,144,255,.2);margin-bottom:16px}.hero-title[data-v-5cbe52d9]{font-size:26px;font-weight:800;color:#0f172a;margin-bottom:8px;letter-spacing:-.3px;line-height:1.3}.hero-subtitle[data-v-5cbe52d9]{font-size:14px;color:#64748b;margin-bottom:32px;line-height:1.5}.hero-stats[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:32px;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.hstat[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;padding:12px 14px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.04);box-shadow:0 1px 3px rgba(0,0,0,.04);-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;text-align:left;-webkit-transition:all .25s;transition:all .25s}.hstat[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.1);box-shadow:0 4px 16px rgba(24,144,255,.1);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.hstat-icon[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,rgba(24,144,255,.1),rgba(114,46,209,.08));font-size:16px;color:var(--primary-color,#1890ff);-ms-flex-negative:0;flex-shrink:0}.hstat-body[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0}.hstat-val[data-v-5cbe52d9]{font-size:12px;font-weight:700;color:#0f172a}.hstat-label[data-v-5cbe52d9],.hstat-val[data-v-5cbe52d9]{line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hstat-label[data-v-5cbe52d9]{font-size:10px;color:#94a3b8;margin-top:1px}.hero-cta[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:16px}.hero-cta .ant-btn[data-v-5cbe52d9]{border-radius:10px;font-weight:600;height:42px;padding:0 24px;font-size:14px}.hero-cta .ant-btn-primary[data-v-5cbe52d9]{-webkit-box-shadow:0 4px 14px rgba(24,144,255,.3);box-shadow:0 4px 14px rgba(24,144,255,.3)}.hero-hint[data-v-5cbe52d9]{font-size:12px;color:#94a3b8}.panel-header-actions[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.panel-header-icon[data-v-5cbe52d9]{font-size:15px;color:#94a3b8;cursor:pointer;padding:4px;border-radius:6px;-webkit-transition:color .2s,background .2s;transition:color .2s,background .2s}.panel-header-icon[data-v-5cbe52d9]:hover{color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)}.panel-summary[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:0;padding:0;border-bottom:1px solid #f1f5f9}.summary-chip[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 4px;border-right:1px solid #f1f5f9}.summary-chip[data-v-5cbe52d9]:last-child{border-right:none}.sc-num[data-v-5cbe52d9]{font-size:14px;font-weight:700;color:#0f172a;line-height:1.2;font-family:SF Mono,Monaco,monospace}.sc-num.up[data-v-5cbe52d9]{color:#16a34a}.sc-num.down[data-v-5cbe52d9]{color:#dc2626}.sc-label[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;text-transform:uppercase;letter-spacing:.5px;margin-top:2px}.batch-bar[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 12px;background:-webkit-gradient(linear,left top,right top,from(#eff6ff),to(#f0f5ff));background:linear-gradient(90deg,#eff6ff,#f0f5ff);border-bottom:1px solid #dbeafe}.batch-all-cb[data-v-5cbe52d9]{font-size:12px}.wl-card[data-v-5cbe52d9]{position:relative;padding:10px 12px;border-radius:8px;cursor:pointer;-webkit-transition:all .15s;transition:all .15s;margin-bottom:2px;border:1px solid transparent}.wl-card[data-v-5cbe52d9]:hover{background:#f8fafc}.wl-card.active[data-v-5cbe52d9]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border-color:#91d5ff}.wl-card-cb[data-v-5cbe52d9]{position:absolute;top:12px;left:4px;z-index:1}.wl-card-body[data-v-5cbe52d9]{-webkit-transition:padding-left .2s;transition:padding-left .2s}.wl-card-body.with-cb[data-v-5cbe52d9]{padding-left:24px}.wl-row-main[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:5px}.wl-symbol[data-v-5cbe52d9]{font-size:13px;font-weight:700;color:#0f172a}.wl-market[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;letter-spacing:.3px;padding:1px 4px;background:#f1f5f9;border-radius:3px}.wl-spacer[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1}.wl-price[data-v-5cbe52d9]{font-size:12px;font-weight:600;color:#0f172a;font-family:SF Mono,Monaco,monospace}.wl-change[data-v-5cbe52d9]{font-size:10px;font-weight:700;font-family:SF Mono,Monaco,monospace;padding:1px 5px;border-radius:4px;margin-left:4px}.wl-change.up[data-v-5cbe52d9]{color:#16a34a;background:rgba(22,163,74,.08)}.wl-change.down[data-v-5cbe52d9]{color:#dc2626;background:rgba(220,38,38,.06)}.wl-row-pnl[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;margin-top:4px;font-family:SF Mono,Monaco,monospace}.wl-pnl-qty[data-v-5cbe52d9]{font-size:10px;color:#94a3b8}.wl-pnl-val[data-v-5cbe52d9]{font-size:10px;font-weight:600;margin-left:auto}.wl-pnl-val.up[data-v-5cbe52d9]{color:#16a34a}.wl-pnl-val.down[data-v-5cbe52d9]{color:#dc2626}.wl-row-task[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:4px}.wl-row-task[data-v-5cbe52d9],.wl-task-badge[data-v-5cbe52d9]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.wl-task-badge[data-v-5cbe52d9]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:3px;font-size:10px;padding:1px 8px;border-radius:10px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.wl-task-badge.active[data-v-5cbe52d9]{color:#16a34a;background:rgba(22,163,74,.08)}.wl-task-badge.paused[data-v-5cbe52d9]{color:#94a3b8;background:#f1f5f9}.wl-task-badge[data-v-5cbe52d9]:hover{opacity:.75}.wl-task-next[data-v-5cbe52d9]{font-size:10px;color:#94a3b8;margin-left:auto}.wl-card-hover-actions[data-v-5cbe52d9]{position:absolute;top:0;right:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px;padding-right:8px;opacity:0;-webkit-transition:opacity .15s;transition:opacity .15s;background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#f8fafc));background:linear-gradient(90deg,transparent,#f8fafc 30%);border-radius:0 8px 8px 0;pointer-events:none}.wl-card:hover .wl-card-hover-actions[data-v-5cbe52d9]{opacity:1;pointer-events:auto}.wl-card.active .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#e6f7ff));background:linear-gradient(90deg,transparent,#e6f7ff 30%)}.wl-hover-btn[data-v-5cbe52d9]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:26px;height:26px;border-radius:6px;font-size:13px;color:#64748b;cursor:pointer;-webkit-transition:all .15s;transition:all .15s;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06)}.wl-hover-btn[data-v-5cbe52d9]:hover{color:var(--primary-color,#1890ff);background:#e6f7ff}.wl-hover-btn.danger[data-v-5cbe52d9]:hover{color:#dc2626;background:#fef2f2}.watchlist-empty[data-v-5cbe52d9]{text-align:center;padding:32px 16px}.we-icon[data-v-5cbe52d9]{font-size:36px;color:#e2e8f0;margin-bottom:12px}.watchlist-empty p[data-v-5cbe52d9]{font-size:12px;color:#94a3b8;margin-bottom:12px}.batch-modal-summary[data-v-5cbe52d9]{margin-bottom:16px}.batch-modal-summary p[data-v-5cbe52d9]{font-size:13px;color:#475569;margin-bottom:8px}.batch-symbols-preview[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px;max-height:80px;overflow-y:auto}.task-drawer-empty[data-v-5cbe52d9]{text-align:center;padding:48px 16px;color:#94a3b8}.task-drawer-empty p[data-v-5cbe52d9]{margin-top:12px;font-size:13px}.task-drawer-list[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.task-item[data-v-5cbe52d9]{padding:14px 16px;border:1px solid #e2e8f0;border-radius:10px;background:#fafafa;-webkit-transition:-webkit-box-shadow .2s;transition:-webkit-box-shadow .2s;transition:box-shadow .2s;transition:box-shadow .2s,-webkit-box-shadow .2s}.task-item[data-v-5cbe52d9]:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.task-item-header[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:8px}.task-item-name[data-v-5cbe52d9]{font-size:13px;font-weight:600;color:#0f172a}.task-item-meta[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;font-size:12px;color:#64748b;margin-bottom:10px}.task-item-meta .anticon[data-v-5cbe52d9]{margin-right:4px}.task-item-actions[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.add-stock-modal-content .market-tabs[data-v-5cbe52d9]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-5cbe52d9],.add-stock-modal-content .search-results-section[data-v-5cbe52d9],.add-stock-modal-content .symbol-search-section[data-v-5cbe52d9]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-5cbe52d9],.add-stock-modal-content .search-results-section .section-title[data-v-5cbe52d9]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-5cbe52d9]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-5cbe52d9]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-5cbe52d9]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-5cbe52d9]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-5cbe52d9]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-5cbe52d9]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.skeleton-box .skeleton-text[data-v-5cbe52d9]{display:block;height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;border-radius:4px;margin:3px 0}.skeleton-box .skeleton-text.short[data-v-5cbe52d9]{width:40px;height:9px}.skeleton-cell[data-v-5cbe52d9]{background:#f8fafc!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:8px 4px}.skeleton-cell .skeleton-text[data-v-5cbe52d9]{width:80%;height:10px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;border-radius:3px;margin:2px 0}.skeleton-cell .skeleton-text.short[data-v-5cbe52d9]{width:50%;height:8px}.skeleton-item[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:6px 0}.skeleton-item .skeleton-text[data-v-5cbe52d9]{height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;border-radius:4px;-webkit-box-flex:1;-ms-flex:1;flex:1}.skeleton-item .skeleton-text.short[data-v-5cbe52d9]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:40px}.indices-empty[data-v-5cbe52d9],.indices-loading[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:11px;color:#94a3b8;padding:4px 16px}.indices-loading .anticon[data-v-5cbe52d9]{margin-right:6px}.heatmap-empty[data-v-5cbe52d9]{grid-column:-1;text-align:center;padding:20px;color:#94a3b8;font-size:12px}@-webkit-keyframes skeleton-pulse-5cbe52d9{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes skeleton-pulse-5cbe52d9{0%{background-position:200% 0}to{background-position:-200% 0}}.theme-dark .skeleton-box .skeleton-text[data-v-5cbe52d9],.theme-dark .skeleton-cell .skeleton-text[data-v-5cbe52d9],.theme-dark .skeleton-item .skeleton-text[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#2a2a2a),color-stop(50%,#333),color-stop(75%,#2a2a2a));background:linear-gradient(90deg,#2a2a2a 25%,#333 50%,#2a2a2a 75%);background-size:200% 100%}.theme-dark .skeleton-cell[data-v-5cbe52d9]{background:#1c1c1c!important}.theme-dark .heatmap-empty[data-v-5cbe52d9],.theme-dark .indices-empty[data-v-5cbe52d9],.theme-dark .indices-loading[data-v-5cbe52d9]{color:#666}.qd-dark-modal .ant-modal-content{background:#141414}.qd-dark-modal .ant-modal-header{background:#141414;border-bottom-color:#2a2a2a}.qd-dark-modal .ant-modal-header .ant-modal-title{color:#d4d4d4}.qd-dark-modal .ant-modal-close-x{color:#888}.qd-dark-modal .ant-modal-body{background:#141414;color:#d4d4d4}.qd-dark-modal .ant-modal-footer{background:#141414;border-top-color:#2a2a2a}.qd-dark-modal .ant-modal-footer .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-modal-footer .ant-btn-default:hover{border-color:#1890ff;color:#1890ff}.qd-dark-modal .ant-form-item-label>label{color:#d4d4d4}.qd-dark-modal .ant-input{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-input::-webkit-input-placeholder{color:#555}.qd-dark-modal .ant-input::-moz-placeholder{color:#555}.qd-dark-modal .ant-input:-ms-input-placeholder{color:#555}.qd-dark-modal .ant-input::-ms-input-placeholder{color:#555}.qd-dark-modal .ant-input::placeholder{color:#555}.qd-dark-modal .ant-input-number,.qd-dark-modal .ant-select-selection{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-select-arrow{color:#666}.qd-dark-modal .ant-checkbox-wrapper,.qd-dark-modal .ant-radio-wrapper{color:#d4d4d4}.qd-dark-modal .ant-tabs-bar{border-bottom-color:#2a2a2a}.qd-dark-modal .ant-tabs-tab{color:#888}.qd-dark-modal .ant-tabs-tab:hover{color:#d4d4d4}.qd-dark-modal .ant-tabs-tab-active{color:#1890ff!important}.qd-dark-modal .ant-tag{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-tag-blue{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.3);color:#1890ff}.qd-dark-modal .ant-alert{background:rgba(24,144,255,.06);border-color:#2a2a2a}.qd-dark-modal .ant-alert-message{color:#d4d4d4}.qd-dark-modal .ant-alert-info .ant-alert-icon{color:#1890ff}.qd-dark-modal .ant-list-item{border-bottom-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-list-item-meta-title{color:#d4d4d4}.qd-dark-modal .ant-list-item-meta-description{color:#888}.qd-dark-modal .ant-empty-description{color:#666}.qd-dark-modal .add-stock-modal-content,.qd-dark-modal p{color:#d4d4d4}.qd-dark-modal .add-stock-modal-content .section-title{color:#d4d4d4!important}.qd-dark-modal .add-stock-modal-content .symbol-list{border-color:#2a2a2a;background:#1c1c1c}.qd-dark-modal .add-stock-modal-content .symbol-list .symbol-list-item:hover{background:#252525!important}.qd-dark-modal .add-stock-modal-content .symbol-list .symbol-list-item .symbol-code{color:#d4d4d4!important}.qd-dark-modal .add-stock-modal-content .symbol-list .symbol-list-item .symbol-name{color:#888!important}.qd-dark-modal .add-stock-modal-content .selected-symbol-info strong{color:#d4d4d4}.qd-dark-modal .add-stock-modal-content .selected-symbol-info span{color:#888!important}.qd-dark-modal .batch-modal-summary p{color:#d4d4d4}.qd-dark-modal .batch-symbols-preview .ant-tag{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.3);color:#1890ff}.qd-dark-modal .task-item{background:#1c1c1c;border-color:#2a2a2a}.qd-dark-modal .task-item:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3)}.qd-dark-modal .task-item-name{color:#d4d4d4}.qd-dark-modal .task-item-meta{color:#888}.qd-dark-modal .task-drawer-empty{color:#666}.qd-dark-modal .history-item{background:#1c1c1c;border-color:#2a2a2a}.qd-dark-modal .search-result-item{color:#d4d4d4}.qd-dark-modal .search-result-item:hover{background:#1c1c1c}.qd-dark-modal .search-result-name{color:#d4d4d4}.qd-dark-modal .search-result-market{color:#888}.qd-dark-drawer .ant-drawer-content{background:#141414}.qd-dark-drawer .ant-drawer-header{background:#141414;border-bottom-color:#2a2a2a}.qd-dark-drawer .ant-drawer-header .ant-drawer-title{color:#d4d4d4}.qd-dark-drawer .ant-drawer-header .ant-drawer-close{color:#888}.qd-dark-drawer .ant-drawer-body{background:#141414;color:#d4d4d4}.qd-dark-drawer .task-item{background:#1c1c1c;border-color:#2a2a2a}.qd-dark-drawer .task-item:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3)}.qd-dark-drawer .task-item-name{color:#d4d4d4}.qd-dark-drawer .task-item-meta{color:#888}.qd-dark-drawer .task-drawer-empty{color:#666}.qd-dark-drawer .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-drawer .ant-btn-default:hover{border-color:#1890ff;color:#1890ff}.qd-dark-drawer .ant-btn-danger{background:transparent}.qd-dark-drawer .ant-popover-inner{background:#1c1c1c}.qd-dark-drawer .ant-popover-message,.qd-dark-drawer .ant-popover-message-title{color:#d4d4d4}.qd-dark-drawer .ant-popover-buttons .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-select-dropdown,body.colorWeak .ant-select-dropdown{background:#1c1c1c}.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item{color:#d4d4d4}.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item-active,.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item:hover,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item-active,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item:hover{background:#252525}.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item-selected,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item-selected{background:rgba(24,144,255,.1);color:#1890ff} \ No newline at end of file diff --git a/frontend/dist/css/734.1113ae8a.css b/frontend/dist/css/734.1113ae8a.css deleted file mode 100644 index 3433139..0000000 --- a/frontend/dist/css/734.1113ae8a.css +++ /dev/null @@ -1 +0,0 @@ -.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.cm-s-monokai.CodeMirror{background:#272822;color:#f8f8f2}.cm-s-monokai div.CodeMirror-selected{background:#49483e}.cm-s-monokai .CodeMirror-line::selection,.cm-s-monokai .CodeMirror-line>span::selection,.cm-s-monokai .CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-line::-moz-selection,.cm-s-monokai .CodeMirror-line>span::-moz-selection,.cm-s-monokai .CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)}.cm-s-monokai .CodeMirror-gutters{background:#272822;border-right:0}.cm-s-monokai .CodeMirror-guttermarker{color:#fff}.cm-s-monokai .CodeMirror-guttermarker-subtle,.cm-s-monokai .CodeMirror-linenumber{color:#d0d0d0}.cm-s-monokai .CodeMirror-cursor{border-left:1px solid #f8f8f0}.cm-s-monokai span.cm-comment{color:#75715e}.cm-s-monokai span.cm-atom,.cm-s-monokai span.cm-number{color:#ae81ff}.cm-s-monokai span.cm-comment.cm-attribute{color:#97b757}.cm-s-monokai span.cm-comment.cm-def{color:#bc9262}.cm-s-monokai span.cm-comment.cm-tag{color:#bc6283}.cm-s-monokai span.cm-comment.cm-type{color:#5998a6}.cm-s-monokai span.cm-attribute,.cm-s-monokai span.cm-property{color:#a6e22e}.cm-s-monokai span.cm-keyword{color:#f92672}.cm-s-monokai span.cm-builtin{color:#66d9ef}.cm-s-monokai span.cm-string{color:#e6db74}.cm-s-monokai span.cm-variable{color:#f8f8f2}.cm-s-monokai span.cm-variable-2{color:#9effff}.cm-s-monokai span.cm-type,.cm-s-monokai span.cm-variable-3{color:#66d9ef}.cm-s-monokai span.cm-def{color:#fd971f}.cm-s-monokai span.cm-bracket{color:#f8f8f2}.cm-s-monokai span.cm-tag{color:#f92672}.cm-s-monokai span.cm-header,.cm-s-monokai span.cm-link{color:#ae81ff}.cm-s-monokai span.cm-error{background:#f92672;color:#f8f8f0}.cm-s-monokai .CodeMirror-activeline-background{background:#373831}.cm-s-monokai .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important}.cm-s-eclipse span.cm-meta{color:#ff1717}.cm-s-eclipse span.cm-keyword{line-height:1em;font-weight:700;color:#7f0055}.cm-s-eclipse span.cm-atom{color:#219}.cm-s-eclipse span.cm-number{color:#164}.cm-s-eclipse span.cm-def{color:#00f}.cm-s-eclipse span.cm-variable{color:#000}.cm-s-eclipse span.cm-type,.cm-s-eclipse span.cm-variable-2,.cm-s-eclipse span.cm-variable-3{color:#0000c0}.cm-s-eclipse span.cm-operator,.cm-s-eclipse span.cm-property{color:#000}.cm-s-eclipse span.cm-comment{color:#3f7f5f}.cm-s-eclipse span.cm-string{color:#2a00ff}.cm-s-eclipse span.cm-string-2{color:#f50}.cm-s-eclipse span.cm-qualifier{color:#555}.cm-s-eclipse span.cm-builtin{color:#30a}.cm-s-eclipse span.cm-bracket{color:#cc7}.cm-s-eclipse span.cm-tag{color:#170}.cm-s-eclipse span.cm-attribute{color:#00c}.cm-s-eclipse span.cm-link{color:#219}.cm-s-eclipse span.cm-error{color:red}.cm-s-eclipse .CodeMirror-activeline-background{background:#e8f2ff}.cm-s-eclipse .CodeMirror-matchingbracket{outline:1px solid grey;color:#000!important}[data-v-4fea1865] .ant-modal{top:20px!important}.visual-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;background:#fafafa;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:500px;overflow:hidden}.visual-modules-list[data-v-4fea1865]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px}.empty-visual-state[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;color:#999}.visual-module-card[data-v-4fea1865]{background:#fff;border:1px solid #e8e8e8;border-radius:4px;margin-bottom:12px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.visual-module-card .module-header[data-v-4fea1865]{padding:8px 12px;border-bottom:1px solid #f0f0f0;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;background:#f9f9f9}.visual-module-card .module-header .module-title[data-v-4fea1865],.visual-module-card .module-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.visual-module-card .module-header .module-title[data-v-4fea1865]{font-weight:500;gap:8px}.visual-module-card .module-header .remove-icon[data-v-4fea1865]{cursor:pointer;color:#999}.visual-module-card .module-header .remove-icon[data-v-4fea1865]:hover{color:#ff4d4f}.visual-module-card .module-body[data-v-4fea1865]{padding:12px}.visual-module-card .style-config[data-v-4fea1865]{margin-top:12px;padding-top:12px;border-top:1px dashed #f0f0f0}.visual-module-card .style-config .label[data-v-4fea1865]{margin-right:8px;color:#666}.add-module-bar[data-v-4fea1865]{padding:12px;background:#fff;border-top:1px solid #e8e8e8}@media (max-width:768px){.visual-editor-container[data-v-4fea1865]{height:auto;min-height:400px}}.ant-form-item[data-v-4fea1865]{margin-bottom:16px}.editor-content[data-v-4fea1865]{padding:24px;background:#fff;min-height:500px;max-height:82vh;overflow-y:auto}.editor-layout[data-v-4fea1865]{min-height:450px}.code-editor-column[data-v-4fea1865]{height:100%}.code-editor-column[data-v-4fea1865],.code-section[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.code-section[data-v-4fea1865]{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:12px;padding-bottom:12px;border-bottom:2px solid #f0f0f0}.code-section .section-header .section-title[data-v-4fea1865],.code-section .section-header[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.code-section .section-header .section-title[data-v-4fea1865]{font-weight:600;font-size:14px;color:#262626;gap:8px}.code-section .section-header .section-title[data-v-4fea1865]:before{content:"";display:inline-block;width:4px;height:14px;background:#1890ff;border-radius:2px}.code-section .section-header .section-actions[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link{color:#1890ff;padding:0 8px}.code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link:hover{color:#40a9ff}.code-editor-container[data-v-4fea1865]{border:1px solid #d9d9d9;border-radius:6px;overflow:hidden;height:62vh;min-height:520px;max-height:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05);box-shadow:inset 0 1px 3px rgba(0,0,0,.05);-webkit-transition:all .3s ease;transition:all .3s ease}.code-editor-container[data-v-4fea1865]:hover{border-color:#40a9ff}.code-editor-container[data-v-4fea1865]:focus-within{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05);box-shadow:0 0 0 2px rgba(24,144,255,.2),inset 0 1px 3px rgba(0,0,0,.05)}.code-editor-container[data-v-4fea1865] .CodeMirror{-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%;font-family:Courier New,Consolas,Liberation Mono,Menlo,monospace;font-size:13px;line-height:1.6;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fafafa}.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{-webkit-box-flex:1;-ms-flex:1;flex:1;min-height:100%;max-height:none;overflow-y:auto;overflow-x:auto}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:100%!important;padding-left:12px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-gutters{border-right:1px solid #e8e8e8;background:-webkit-gradient(linear,left top,right top,from(#fafafa),to(#f5f5f5));background:linear-gradient(90deg,#fafafa 0,#f5f5f5);width:45px;padding-right:4px}.code-editor-container[data-v-4fea1865] .CodeMirror-linenumber{padding:0 8px 0 4px;min-width:30px;text-align:right;color:#999;font-size:12px}.code-editor-container[data-v-4fea1865] .CodeMirror-lines{padding:12px 8px;background:#fff}.code-editor-container[data-v-4fea1865] .CodeMirror-line{padding-left:0}.code-editor-container[data-v-4fea1865] .CodeMirror-cursor{border-left:2px solid #1890ff}.code-editor-container[data-v-4fea1865] .CodeMirror-selected{background:#e6f7ff}.code-mode-split[data-v-4fea1865]{width:100%}.ai-pane[data-v-4fea1865],.ai-panel[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ai-panel[data-v-4fea1865]{border:1px solid #e8e8e8;border-radius:6px;background:#fafafa;padding:12px;height:62vh;min-height:520px}.ai-panel-title[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:10px;color:#262626}.ai-panel-hint[data-v-4fea1865]{margin-top:10px;color:#8c8c8c;font-size:12px;line-height:1.5}.ai-panel[data-v-4fea1865] textarea.ant-input{-webkit-box-flex:1;-ms-flex:1;flex:1;resize:none}.editor-footer[data-v-4fea1865]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px}.editor-footer[data-v-4fea1865] .ant-btn{height:36px;padding:0 20px;font-weight:500;border-radius:4px;-webkit-transition:all .3s ease;transition:all .3s ease}.editor-footer[data-v-4fea1865] .ant-btn:not(.ant-btn-primary):hover{border-color:#40a9ff;color:#40a9ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 8px rgba(24,144,255,.2);box-shadow:0 2px 8px rgba(24,144,255,.2)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary{-webkit-box-shadow:0 2px 4px rgba(24,144,255,.3);box-shadow:0 2px 4px rgba(24,144,255,.3)}.editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary:hover{-webkit-box-shadow:0 4px 12px rgba(24,144,255,.4);box-shadow:0 4px 12px rgba(24,144,255,.4);-webkit-transform:translateY(-1px);transform:translateY(-1px)}@media (max-width:768px){.indicator-editor-modal[data-v-4fea1865] .ant-modal{width:100%!important;max-width:100%!important;margin:0!important;top:0!important;padding-bottom:0!important;max-height:100vh!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-content{height:100vh!important;max-height:100vh!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:0!important}.indicator-editor-modal[data-v-4fea1865] .ant-modal-header{-ms-flex-negative:0;flex-shrink:0;padding:16px;border-bottom:1px solid #e8e8e8}.indicator-editor-modal[data-v-4fea1865] .ant-modal-body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:0!important;min-height:0}.indicator-editor-modal[data-v-4fea1865] .ant-modal-footer{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;border-top:1px solid #e8e8e8}.editor-content[data-v-4fea1865]{padding:16px!important;min-height:auto!important;max-height:none!important;overflow-y:visible!important}.editor-layout[data-v-4fea1865]{min-height:auto!important}.code-editor-column[data-v-4fea1865]{width:100%!important;margin-bottom:16px}.code-section[data-v-4fea1865]{margin-bottom:16px}.code-section .section-header[data-v-4fea1865]{padding-bottom:8px;margin-bottom:8px}.code-section .section-header .section-title[data-v-4fea1865]{font-size:13px}.code-editor-container[data-v-4fea1865]{height:250px!important}.code-editor-container[data-v-4fea1865],.code-editor-container[data-v-4fea1865] .CodeMirror-scroll{min-height:250px!important;max-height:250px!important}.code-editor-container[data-v-4fea1865] .CodeMirror-sizer{min-height:250px!important}.ai-panel[data-v-4fea1865]{height:auto!important;min-height:auto!important}.editor-footer[data-v-4fea1865]{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse;gap:8px;padding:0}.editor-footer[data-v-4fea1865] .ant-btn{width:100%;height:40px;margin:0}}.chart-left[data-v-5f0b12e1]{width:70%!important;-webkit-box-flex:0!important;-ms-flex:0 0 70%!important;flex:0 0 70%!important;position:relative;border-right:1px solid #e8e8e8;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}.chart-left.theme-dark[data-v-5f0b12e1]{background:#131722;border-right-color:#2a2e39}.chart-wrapper[data-v-5f0b12e1]{width:100%;height:100%;position:relative;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;display:-webkit-box;display:-ms-flexbox;display:flex}.theme-dark .chart-wrapper[data-v-5f0b12e1]{background:#131722}.drawing-toolbar[data-v-5f0b12e1]{-ms-flex-negative:0;flex-shrink:0;width:40px;background:#fff;border-right:1px solid #e8e8e8;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 4px;gap:4px;z-index:10;overflow-y:auto;overflow-x:hidden}.chart-left.theme-dark .drawing-toolbar[data-v-5f0b12e1]{background:#131722;border-right-color:#2a2e39}.drawing-tool-btn[data-v-5f0b12e1]{width:32px;height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;border-radius:4px;-webkit-transition:all .2s;transition:all .2s;color:#666;font-size:16px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .drawing-tool-btn[data-v-5f0b12e1]{color:#d1d4dc}.drawing-tool-btn[data-v-5f0b12e1]:hover{background:#f0f2f5;color:#1890ff}.chart-left.theme-dark .drawing-tool-btn[data-v-5f0b12e1]:hover{background:#1f2943;color:#13c2c2}.drawing-tool-btn.active[data-v-5f0b12e1]{background:#e6f7ff;color:#1890ff;border:1px solid #1890ff}.chart-left.theme-dark .drawing-tool-btn.active[data-v-5f0b12e1]{background:#1f2943;color:#13c2c2;border-color:#13c2c2}.drawing-toolbar .ant-divider-vertical[data-v-5f0b12e1]{margin:8px 0;height:20px}.indicator-toolbar[data-v-5f0b12e1]{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 12px;background:#fff;border-bottom:1px solid #e8e8e8;-ms-flex-wrap:wrap;flex-wrap:wrap;z-index:1;position:relative;width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none}.indicator-toolbar[data-v-5f0b12e1]::-webkit-scrollbar{display:none;width:0;height:0}.chart-content-area[data-v-5f0b12e1]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden}.chart-left.theme-dark .indicator-toolbar[data-v-5f0b12e1]{background:#131722;border-bottom-color:#2a2e39}.indicator-btn[data-v-5f0b12e1]{padding:4px 12px;font-size:12px;font-weight:600;color:#666;background:#f0f2f5;border:1px solid #e8e8e8;border-radius:4px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;white-space:nowrap;min-width:40px;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chart-left.theme-dark .indicator-btn[data-v-5f0b12e1]{color:#d1d4dc;background:#1f2943;border-color:#2a2e39}.indicator-btn[data-v-5f0b12e1]:hover{color:#1890ff;border-color:#1890ff;background:#f0f8ff}.chart-left.theme-dark .indicator-btn[data-v-5f0b12e1]:hover{color:#13c2c2;border-color:#13c2c2;background:#1f2943}.indicator-btn.active[data-v-5f0b12e1]{color:#1890ff;background:#fff;border-color:#1890ff;border-width:2px;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.1);box-shadow:0 0 0 2px rgba(24,144,255,.1)}.chart-left.theme-dark .indicator-btn.active[data-v-5f0b12e1]{color:#13c2c2;background:#1f2943;border-color:#13c2c2;-webkit-box-shadow:0 0 0 2px rgba(19,194,194,.2);box-shadow:0 0 0 2px rgba(19,194,194,.2)}.kline-chart-container[data-v-5f0b12e1]{-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;min-width:0;background:#fff;-webkit-transition:background-color .3s;transition:background-color .3s;-ms-touch-action:pan-x pan-y;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;overflow:hidden}.theme-dark .kline-chart-container[data-v-5f0b12e1]{background:#131722}.chart-overlay[data-v-5f0b12e1]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.95);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;z-index:1;backdrop-filter:blur(2px)}.chart-left.theme-dark .chart-overlay[data-v-5f0b12e1]{background:rgba(19,23,34,.95)}.error-box[data-v-5f0b12e1]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333}.initial-hint[data-v-5f0b12e1]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .initial-hint[data-v-5f0b12e1]{background:rgba(19,23,34,.98)}.hint-box[data-v-5f0b12e1]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:400px;padding:20px}.pyodide-warning[data-v-5f0b12e1]{background:hsla(0,0%,100%,.98)}.chart-left.theme-dark .pyodide-warning[data-v-5f0b12e1]{background:rgba(19,23,34,.98)}.warning-box[data-v-5f0b12e1]{text-align:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:500px;padding:20px}.warning-title[data-v-5f0b12e1]{font-size:16px;font-weight:600;color:#faad14;margin-bottom:8px}.warning-desc[data-v-5f0b12e1]{font-size:14px;color:#666;line-height:1.6}.chart-left.theme-dark .warning-box[data-v-5f0b12e1]{color:#d1d4dc}.chart-left.theme-dark .warning-title[data-v-5f0b12e1]{color:#faad14}.chart-left.theme-dark .warning-desc[data-v-5f0b12e1]{color:#868993}.chart-left.theme-dark .hint-box[data-v-5f0b12e1]{color:#d1d4dc}.hint-title[data-v-5f0b12e1]{font-size:18px;font-weight:600;color:#333;margin-bottom:12px}.chart-left.theme-dark .hint-title[data-v-5f0b12e1]{color:#d1d4dc}.hint-desc[data-v-5f0b12e1]{font-size:14px;color:#999;line-height:1.6}.chart-left.theme-dark .hint-desc[data-v-5f0b12e1]{color:#787b86}.history-loading-hint[data-v-5f0b12e1]{position:absolute;left:20px;top:60px;z-index:1000!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 16px;background:hsla(0,0%,100%,.98)!important;border:1px solid #e8e8e8;border-radius:4px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15);font-size:14px;color:#666!important;backdrop-filter:blur(4px);pointer-events:none;visibility:visible!important;opacity:1!important}.chart-left.theme-dark .history-loading-hint[data-v-5f0b12e1]{background:rgba(19,23,34,.98)!important;border-color:#2a2e39;color:#d1d4dc!important}.loading-text[data-v-5f0b12e1]{white-space:nowrap;margin-left:4px}@media (max-width:768px){.drawing-toolbar[data-v-5f0b12e1]{display:none}.indicator-toolbar[data-v-5f0b12e1]{padding-left:12px;-ms-flex-wrap:nowrap;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch}.indicator-toolbar[data-v-5f0b12e1]::-webkit-scrollbar{display:none;width:0;height:0}.indicator-btn[data-v-5f0b12e1]{-ms-flex-negative:0;flex-shrink:0}}@media (max-width:1200px){.drawing-toolbar[data-v-5f0b12e1]{display:none}.indicator-toolbar[data-v-5f0b12e1]{padding-left:12px}.kline-chart-container[data-v-5f0b12e1]{margin-left:0}.chart-left[data-v-5f0b12e1]{width:100%!important;min-width:100%!important;border-right:none;border-bottom:1px solid #e8e8e8;height:600px!important;min-height:600px!important}.chart-wrapper[data-v-5f0b12e1],.kline-chart-container[data-v-5f0b12e1]{height:100%!important;min-height:600px!important}}@media (max-width:992px){.chart-left[data-v-5f0b12e1]{height:650px!important;min-height:650px!important}.chart-wrapper[data-v-5f0b12e1],.kline-chart-container[data-v-5f0b12e1]{height:100%!important;min-height:650px!important}}@media (max-width:768px){.chart-left[data-v-5f0b12e1]{height:60vh!important;min-height:400px!important;max-height:80vh!important}.chart-wrapper[data-v-5f0b12e1]{height:100%!important;min-height:400px!important;max-height:100%!important}.kline-chart-container[data-v-5f0b12e1]{height:calc(100% - 45px)!important;min-height:350px!important;max-height:calc(100% - 45px)!important}}@media (max-width:576px){.chart-left[data-v-5f0b12e1]{height:55vh!important;min-height:350px!important;max-height:75vh!important}.chart-wrapper[data-v-5f0b12e1]{height:100%!important;min-height:350px!important;max-height:100%!important}.kline-chart-container[data-v-5f0b12e1]{height:calc(100% - 45px)!important;min-height:300px!important;max-height:calc(100% - 45px)!important}}[data-v-473e449c] .ant-form-item-label{white-space:normal;line-height:1.2}[data-v-473e449c] .ant-form-item-label>label{white-space:normal}[data-v-473e449c] .ant-form-item-control{min-width:0}.backtest-modal[data-v-473e449c] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.backtest-content[data-v-473e449c]{position:relative}.field-hint[data-v-473e449c]{margin-top:4px;font-size:12px;line-height:1.4;color:#8c8c8c}.section-title[data-v-473e449c]{font-size:15px;font-weight:600;color:#262626;margin-bottom:16px;padding-bottom:8px;border-bottom:2px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.section-title .anticon[data-v-473e449c]{color:#1890ff}.config-section[data-v-473e449c]{margin-bottom:24px}.precision-info[data-v-473e449c]{-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.date-quick-select[data-v-473e449c],.precision-info[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.date-quick-select[data-v-473e449c]{padding:8px 12px;background:#fafafa;border-radius:6px;border:1px solid #f0f0f0}.result-section[data-v-473e449c]{margin-top:24px}.metrics-cards[data-v-473e449c]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px}@media (max-width:1200px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(4,1fr)}}@media (max-width:992px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(3,1fr)}}@media (max-width:576px){.metrics-cards[data-v-473e449c]{grid-template-columns:repeat(2,1fr)}}.metric-card[data-v-473e449c]{background:#fafafa;border-radius:8px;padding:16px;text-align:center;-webkit-transition:all .3s;transition:all .3s}.metric-card[data-v-473e449c]:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.1);box-shadow:0 2px 8px rgba(0,0,0,.1)}.metric-card.positive[data-v-473e449c]{background:linear-gradient(135deg,#f6ffed,#d9f7be)}.metric-card.positive .metric-value[data-v-473e449c]{color:#52c41a}.metric-card.negative[data-v-473e449c]{background:linear-gradient(135deg,#fff2f0,#ffccc7)}.metric-card.negative .metric-value[data-v-473e449c]{color:#f5222d}.metric-card .metric-label[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.metric-card .metric-value[data-v-473e449c]{font-size:20px;font-weight:700;color:#262626}.metric-card .metric-amount[data-v-473e449c]{font-size:12px;color:#8c8c8c;margin-top:4px}.chart-section[data-v-473e449c]{margin-bottom:24px}.chart-title[data-v-473e449c]{font-size:14px;font-weight:600;color:#595959;margin-bottom:12px}.equity-chart[data-v-473e449c]{width:100%;height:300px;border:1px solid #f0f0f0;border-radius:8px}.trades-section[data-v-473e449c]{margin-top:24px}.loading-overlay[data-v-473e449c]{position:absolute;top:0;left:0;right:0;bottom:0;background:hsla(0,0%,100%,.9);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:100;border-radius:8px}.loading-overlay .loading-content[data-v-473e449c]{text-align:center}.loading-overlay .loading-animation[data-v-473e449c]{margin-bottom:20px}.loading-overlay .chart-bars[data-v-473e449c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;height:60px;gap:6px}.loading-overlay .bar[data-v-473e449c]{width:8px;background:-webkit-gradient(linear,left top,left bottom,from(#1890ff),to(#52c41a));background:linear-gradient(180deg,#1890ff,#52c41a);border-radius:4px;-webkit-animation:barPulse-473e449c 1.2s ease-in-out infinite;animation:barPulse-473e449c 1.2s ease-in-out infinite}.loading-overlay .bar1[data-v-473e449c]{height:20px;-webkit-animation-delay:0s;animation-delay:0s}.loading-overlay .bar2[data-v-473e449c]{height:35px;-webkit-animation-delay:.1s;animation-delay:.1s}.loading-overlay .bar3[data-v-473e449c]{height:50px;-webkit-animation-delay:.2s;animation-delay:.2s}.loading-overlay .bar4[data-v-473e449c]{height:35px;-webkit-animation-delay:.3s;animation-delay:.3s}.loading-overlay .bar5[data-v-473e449c]{height:20px;-webkit-animation-delay:.4s;animation-delay:.4s}@-webkit-keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}@keyframes barPulse-473e449c{0%,to{-webkit-transform:scaleY(1);transform:scaleY(1);opacity:.7}50%{-webkit-transform:scaleY(1.5);transform:scaleY(1.5);opacity:1}}.loading-overlay .loading-text[data-v-473e449c]{font-size:16px;font-weight:500;color:#1890ff;margin-bottom:8px}.loading-overlay .loading-subtext[data-v-473e449c]{font-size:13px;color:#666;-webkit-animation:fadeInOut-473e449c 2s ease-in-out infinite;animation:fadeInOut-473e449c 2s ease-in-out infinite}@-webkit-keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}@keyframes fadeInOut-473e449c{0%,to{opacity:.5}50%{opacity:1}}.backtest-run-viewer[data-v-a484239a] .ant-modal-body{padding:16px;max-height:70vh;overflow-y:auto}.metrics-cards[data-v-a484239a]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.metric-card[data-v-a484239a]{background:#fff;border:1px solid #f0f0f0;border-radius:8px;padding:12px}.metric-card.positive[data-v-a484239a]{border-color:rgba(82,196,26,.35)}.metric-card.negative[data-v-a484239a]{border-color:rgba(245,34,45,.35)}.metric-label[data-v-a484239a]{color:#8c8c8c;font-size:12px}.metric-value[data-v-a484239a]{font-size:18px;font-weight:600;margin-top:4px}.metric-amount[data-v-a484239a]{color:#8c8c8c;font-size:12px;margin-top:4px}.chart-section[data-v-a484239a]{margin-top:8px}.chart-title[data-v-a484239a]{font-weight:600;margin:8px 0;color:#262626}.equity-chart[data-v-a484239a]{width:100%;height:280px}.trades-section[data-v-a484239a]{margin-top:16px}.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.chart-container[data-v-b17e86c2]{background:#f0f2f5;color:#333;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}.chart-container[data-v-b17e86c2],.chart-header[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;min-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-header[data-v-b17e86c2]{max-width:100%;background:#fff;border-bottom:1px solid #e8e8e8;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.02);box-shadow:0 2px 4px rgba(0,0,0,.02)}.header-top[data-v-b17e86c2]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;height:60px}.header-left[data-v-b17e86c2],.header-top[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.header-left[data-v-b17e86c2]{gap:20px}.symbol-select[data-v-b17e86c2]{width:220px}.symbol-select[data-v-b17e86c2] .ant-select-selection{background-color:#fff;border:1px solid #e8e8e8;color:#333;border-radius:4px;-webkit-box-shadow:none;box-shadow:none}.symbol-select[data-v-b17e86c2] .ant-select-selection:hover{border-color:#1890ff}.symbol-select[data-v-b17e86c2] .ant-select-focused .ant-select-selection{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)}.symbol-select[data-v-b17e86c2] .ant-select-arrow,.symbol-select[data-v-b17e86c2] .ant-select-selection__placeholder{color:#999}.timeframe-group[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;background:#f0f2f5;border-radius:4px;padding:2px}.timeframe-item[data-v-b17e86c2]{padding:4px 12px;font-size:13px;font-weight:600;color:#666;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-radius:4px}.timeframe-item[data-v-b17e86c2]:hover{color:#1890ff;background:#fff}.timeframe-item.active[data-v-b17e86c2]{color:#1890ff;background:#fff;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.current-symbol[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:24px}.symbol-info[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.symbol-label[data-v-b17e86c2]{font-size:16px;font-weight:700;color:#333;line-height:1.2}.market-tag[data-v-b17e86c2]{font-size:10px;color:#666;background:#f0f2f5;padding:1px 4px;border-radius:2px;margin-top:2px}.price-info[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.price-info.color-up[data-v-b17e86c2]{color:#0ecb81}.price-info.color-down[data-v-b17e86c2]{color:#f6465d}.symbol-price[data-v-b17e86c2]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace;line-height:1.2}.symbol-change[data-v-b17e86c2]{font-size:12px}.mobile-symbol-price[data-v-b17e86c2]{display:none}.panel-header .theme-switcher[data-v-b17e86c2]{margin-left:auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.panel-header .realtime-toggle-btn[data-v-b17e86c2],.panel-header .theme-toggle-btn[data-v-b17e86c2]{color:#666;border:none;padding:4px 8px;-webkit-transition:all .3s;transition:all .3s;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:4px;min-width:32px;height:32px}.panel-header .realtime-toggle-btn[data-v-b17e86c2]:hover,.panel-header .theme-toggle-btn[data-v-b17e86c2]:hover{color:#1890ff;background:#f0f2f5}.panel-header .realtime-toggle-btn.active[data-v-b17e86c2],.panel-header .theme-toggle-btn.active[data-v-b17e86c2]{color:#1890ff;background:#e6f7ff}.panel-header .realtime-toggle-btn .anticon[data-v-b17e86c2],.panel-header .theme-toggle-btn .anticon[data-v-b17e86c2]{font-size:16px}.chart-content[data-v-b17e86c2]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:100%;max-width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.chart-content[data-v-b17e86c2],.chart-main-row[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;overflow:hidden;width:100%}.chart-main-row[data-v-b17e86c2]{height:80vh!important;min-height:500px!important;max-height:80vh!important;-ms-flex-negative:0;flex-shrink:0}.chart-right[data-v-b17e86c2]{width:30%!important;-webkit-box-flex:0!important;-ms-flex:0 0 30%!important;flex:0 0 30%!important;border-left:1px solid #e8e8e8}.chart-right[data-v-b17e86c2],.indicators-panel[data-v-b17e86c2]{background:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicators-panel[data-v-b17e86c2]{height:100%}.panel-header[data-v-b17e86c2]{height:48px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:0 16px;border-bottom:1px solid #e8e8e8;font-weight:600;color:#333;background:#fff}.panel-header .mobile-header-create-btn[data-v-b17e86c2]{margin-right:0}.panel-body[data-v-b17e86c2]{padding:0;overflow:hidden}.indicator-section[data-v-b17e86c2],.panel-body[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.indicator-section[data-v-b17e86c2]{min-height:0;border-bottom:1px solid #e8e8e8}.indicator-section[data-v-b17e86c2]:last-child{border-bottom:none}.indicator-section.section-empty[data-v-b17e86c2]{min-height:200px}.section-label[data-v-b17e86c2]{-ms-flex-negative:0;flex-shrink:0;padding:12px 16px;background:#fafafa;border-bottom:1px solid #e8e8e8;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.section-label .section-label-left[data-v-b17e86c2],.section-label[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.section-label .section-label-left[data-v-b17e86c2]{gap:8px;-webkit-box-flex:1;-ms-flex:1;flex:1}.section-label .section-label-left .collapse-icon[data-v-b17e86c2]{font-size:12px;color:#999;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.section-label .section-label-left span[data-v-b17e86c2]{font-weight:500}.section-label .buy-indicator-btn[data-v-b17e86c2]{padding:0;height:auto;margin-left:8px}.create-indicator-btn[data-v-b17e86c2]{margin-left:auto;margin-right:0}@media (max-width:768px){.create-indicator-btn[data-v-b17e86c2]{display:none!important}}.section-content[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:12px 16px;min-height:0}.indicator-card[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;padding:10px 12px;border-radius:6px;margin-bottom:8px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:1px solid #e8e8e8}.indicator-card[data-v-b17e86c2]:hover{background:#f0f2f5;border-color:#1890ff;-webkit-transform:translateY(-1px);transform:translateY(-1px);-webkit-box-shadow:0 2px 4px rgba(0,0,0,.05);box-shadow:0 2px 4px rgba(0,0,0,.05)}.indicator-card.active[data-v-b17e86c2]{background:#e6f7ff;border-color:#1890ff}.indicator-card.active .card-name[data-v-b17e86c2]{color:#1890ff}.indicator-card.indicator-active[data-v-b17e86c2]{border-color:#52c41a;border-width:2px;background:#f6ffed}.indicator-card.indicator-active[data-v-b17e86c2]:hover{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.2);box-shadow:0 2px 8px rgba(82,196,26,.2)}.indicator-card.indicator-active .card-name[data-v-b17e86c2]{color:#52c41a}.indicator-card.disabled[data-v-b17e86c2]{opacity:.5;cursor:not-allowed}.indicator-card.disabled[data-v-b17e86c2]:hover{-webkit-transform:none;transform:none;background:#fff;border-color:#e8e8e8;-webkit-box-shadow:none;box-shadow:none}.card-content[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%}.card-header[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:4px}.card-name[data-v-b17e86c2]{font-size:13px;color:#333;font-weight:500;-webkit-box-flex:1;-ms-flex:1;flex:1;margin-right:8px}.card-params[data-v-b17e86c2]{font-size:11px;color:#999;margin-top:2px}.card-desc[data-v-b17e86c2]{font-size:11px;color:#999;margin-top:0;display:-webkit-box;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal;line-height:1.4;min-height:1.4em;max-height:2.8em}.card-action[data-v-b17e86c2]{color:#999;font-size:12px}.card-action[data-v-b17e86c2]:hover{color:#1890ff}.card-actions[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;-ms-flex-negative:0;flex-shrink:0}.action-icon[data-v-b17e86c2]{font-size:16px;cursor:pointer;-webkit-transition:all .3s;transition:all .3s;color:#999}.action-icon.edit-icon[data-v-b17e86c2]{color:#1890ff}.action-icon.edit-icon[data-v-b17e86c2]:hover{color:#40a9ff}.action-icon.delete-icon[data-v-b17e86c2]{color:#ff4d4f}.action-icon.delete-icon[data-v-b17e86c2]:hover{color:#ff7875}.action-icon[data-v-b17e86c2]:hover{color:#1890ff}.action-icon.toggle-icon.active[data-v-b17e86c2]{color:#52c41a}.action-icon.backtest-icon[data-v-b17e86c2]{color:#722ed1}.action-icon.backtest-icon[data-v-b17e86c2]:hover{color:#9254de}.action-icon.backtest-history-icon[data-v-b17e86c2]{color:#13c2c2}.action-icon.backtest-history-icon[data-v-b17e86c2]:hover{color:#08979c}.action-icon.publish-icon[data-v-b17e86c2]{color:#1890ff}.action-icon.publish-icon[data-v-b17e86c2]:hover{color:#40a9ff}.action-icon.publish-icon.published[data-v-b17e86c2]{color:#52c41a}.action-icon.publish-icon.published[data-v-b17e86c2]:hover{color:#73d13d}.action-icon.status-icon.status-normal[data-v-b17e86c2]{color:#52c41a}.action-icon.status-icon.status-expired[data-v-b17e86c2]{color:#ff4d4f}.action-icon.expiry-icon[data-v-b17e86c2]{color:#1890ff}.empty-indicators[data-v-b17e86c2]{padding:40px 20px;gap:8px;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.empty-indicators[data-v-b17e86c2],.loading-indicators[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#999;font-size:13px}.loading-indicators[data-v-b17e86c2]{padding:20px}.custom-scrollbar[data-v-b17e86c2]{scrollbar-width:none;-ms-overflow-style:none}.custom-scrollbar[data-v-b17e86c2]::-webkit-scrollbar{display:none;width:0;height:0}.dark-dropdown{background-color:#fff;border:1px solid #e8e8e8;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.15);box-shadow:0 2px 8px rgba(0,0,0,.15)}.dark-dropdown .ant-select-dropdown-menu-item{color:#333}.dark-dropdown .ant-select-dropdown-menu-item:hover{background-color:#f0f2f5}.dark-dropdown .ant-select-dropdown-menu-item-active{background-color:#e6f7ff;color:#1890ff}.dark-dropdown .ant-empty-description{color:#999}.symbol-option[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.symbol-option .symbol-name[data-v-b17e86c2]{font-weight:600;color:#8f8d8d;margin-right:8px}.symbol-option .symbol-name-extra[data-v-b17e86c2]{font-size:12px;color:#999;margin-left:4px}.empty-watchlist-hint[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#666;font-size:12px}@media (max-width:768px){.chart-container[data-v-b17e86c2]{padding:0;width:calc(100% + 44px)!important;margin:-22px}.chart-header[data-v-b17e86c2]{padding:12px}.chart-header .header-top[data-v-b17e86c2],.chart-header[data-v-b17e86c2]{gap:12px;height:auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-header .header-top[data-v-b17e86c2]{padding:0}.chart-header .header-left[data-v-b17e86c2]{width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.chart-header .search-section[data-v-b17e86c2]{width:100%}.chart-header .search-section .symbol-select[data-v-b17e86c2]{width:100%!important}.chart-header .timeframe-group[data-v-b17e86c2]{width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px}.chart-header .timeframe-group .timeframe-item[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:calc(14.28% - 4px);text-align:center;padding:6px 8px;font-size:12px}.chart-header .current-symbol[data-v-b17e86c2]{display:none}.chart-content[data-v-b17e86c2]{overflow-y:auto}.chart-content[data-v-b17e86c2],.chart-main-row[data-v-b17e86c2]{-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important;height:auto!important;min-height:auto!important;max-height:none!important}.mobile-symbol-price[data-v-b17e86c2]{-webkit-box-ordinal-group:1!important;-ms-flex-order:0!important;order:0!important;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 16px;background:#fff;width:100%}.mobile-symbol-price .mobile-price-info[data-v-b17e86c2],.mobile-symbol-price[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.mobile-symbol-price .mobile-price-info[data-v-b17e86c2]{gap:12px;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.mobile-symbol-price .mobile-price-info.color-up[data-v-b17e86c2]{color:#0ecb81}.mobile-symbol-price .mobile-price-info.color-down[data-v-b17e86c2]{color:#f6465d}.mobile-symbol-price .mobile-price-info .mobile-symbol-price[data-v-b17e86c2]{font-size:18px;font-weight:600;font-family:Roboto Mono,monospace}.mobile-symbol-price .mobile-price-info .mobile-symbol-change[data-v-b17e86c2]{font-size:14px;font-weight:500}kline-chart[data-v-b17e86c2]{-webkit-box-ordinal-group:2!important;-ms-flex-order:1!important;order:1!important;width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;display:block!important;margin-bottom:0!important}kline-chart[data-v-b17e86c2] .chart-left{width:100%!important;height:350px!important;min-height:350px!important;max-height:350px!important;border-right:none!important;border-bottom:1px solid #e8e8e8!important}.chart-right[data-v-b17e86c2]{-webkit-box-ordinal-group:3!important;-ms-flex-order:2!important;order:2!important;width:100%!important;min-width:100%!important;max-width:100%!important;-webkit-box-flex:0!important;-ms-flex:0 0 auto!important;flex:0 0 auto!important;height:auto!important;max-height:calc(100vh - 470px)!important;border-left:none!important;border-top:none!important;margin-top:0!important;display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;visibility:visible!important;opacity:1!important}.chart-right .indicators-panel[data-v-b17e86c2]{height:auto!important;min-height:600px!important;max-height:calc(100vh - 410px)!important;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .panel-header[data-v-b17e86c2]{position:sticky;top:0;background:#fff;z-index:10;border-bottom:1px solid #e8e8e8;padding:12px;font-size:14px;-ms-flex-negative:0;flex-shrink:0}.chart-right .indicators-panel .panel-header .mobile-header-create-btn[data-v-b17e86c2]{margin-right:0;font-size:12px;height:28px;padding:0 12px}.chart-right .indicators-panel .panel-body[data-v-b17e86c2]{padding:0;overflow:visible;min-height:400px!important}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2],.chart-right .indicators-panel .panel-body[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2]{overflow:hidden;min-height:0;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-bar{margin-bottom:0;-ms-flex-negative:0;flex-shrink:0;border-bottom:1px solid #e8e8e8}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab{color:#666;font-size:14px}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab-active{color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-ink-bar{background-color:#1890ff}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-content{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tabpane{height:100%;overflow:hidden;display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0}.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tabpane-active{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;height:100%;overflow:hidden}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-b17e86c2],.chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-content-holder{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-height:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-tab-content[data-v-b17e86c2]{width:100%}.chart-right .indicators-panel .mobile-indicator-tabs .section-content[data-v-b17e86c2]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto!important;overflow-x:hidden;padding:12px;min-height:0;height:100%;-webkit-overflow-scrolling:touch;position:relative}.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-b17e86c2],.chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn[data-v-b17e86c2]{display:none!important}.chart-right .indicators-panel .indicator-section .section-label[data-v-b17e86c2]{padding:10px 12px;font-size:13px}.chart-right .indicators-panel .section-content[data-v-b17e86c2]{padding:10px 12px}.chart-right .indicators-panel .indicator-card[data-v-b17e86c2]{padding:10px}.chart-right .indicators-panel .indicator-card .card-name[data-v-b17e86c2]{font-size:13px}.chart-right .indicators-panel .indicator-card .card-desc[data-v-b17e86c2],.chart-right .indicators-panel .indicator-card .card-params[data-v-b17e86c2]{font-size:11px}}.qt-header-btn[data-v-b17e86c2]{margin-left:16px;background:linear-gradient(135deg,#1890ff,#722ed1);border:none;color:#fff;border-radius:6px;font-weight:600;font-size:12px;padding:0 12px;height:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;-webkit-box-shadow:0 2px 8px rgba(24,144,255,.3);box-shadow:0 2px 8px rgba(24,144,255,.3);-webkit-transition:all .3s;transition:all .3s}.qt-header-btn[data-v-b17e86c2]:focus,.qt-header-btn[data-v-b17e86c2]:hover{background:linear-gradient(135deg,#40a9ff,#9254de);color:#fff;-webkit-box-shadow:0 4px 12px rgba(24,144,255,.45);box-shadow:0 4px 12px rgba(24,144,255,.45);-webkit-transform:translateY(-1px);transform:translateY(-1px)}.qt-floating-btn[data-v-b17e86c2]{position:fixed;right:24px;bottom:80px;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:999;-webkit-transition:all .3s;transition:all .3s;font-size:22px}.qt-floating-btn[data-v-b17e86c2]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(24,144,255,.55);box-shadow:0 6px 24px rgba(24,144,255,.55)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark[data-v-b17e86c2],body.dark,body.realdark{background:#131722;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.3);box-shadow:0 2px 4px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .symbol-label[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .market-tag[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-up[data-v-b17e86c2],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .price-info.color-down[data-v-b17e86c2],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-b17e86c2],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 2px 8px rgba(23,125,220,.35);box-shadow:0 2px 8px rgba(23,125,220,.35)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-b17e86c2]:focus,.chart-container.theme-dark .chart-header .header-top .current-symbol .qt-header-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{background:linear-gradient(135deg,#3c9ae8,#854eca);-webkit-box-shadow:0 4px 12px rgba(23,125,220,.5);box-shadow:0 4px 12px rgba(23,125,220,.5)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-b17e86c2],body.dark,body.realdark{background:linear-gradient(135deg,#177ddc,#642ab5);-webkit-box-shadow:0 4px 16px rgba(23,125,220,.45);box-shadow:0 4px 16px rgba(23,125,220,.45)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .qt-floating-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{-webkit-box-shadow:0 6px 24px rgba(23,125,220,.6);box-shadow:0 6px 24px rgba(23,125,220,.6)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection,body.dark,body.realdark{background-color:#1e222d;border-color:#2a2e39;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection:hover,body.dark,body.realdark{border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-focused .ant-select-selection,body.dark,body.realdark{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.3);box-shadow:0 0 0 2px rgba(24,144,255,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-arrow,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection__placeholder,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group[data-v-b17e86c2],body.dark,body.realdark{background:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff;background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item.active[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff;background:#1e222d;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 2px rgba(0,0,0,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-b17e86c2],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#21283c}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-b17e86c2],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-b17e86c2],body.dark,body.realdark{color:#f6465d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-left-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn.active[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff;background:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-body[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-section[data-v-b17e86c2],body.dark,body.realdark{border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#2a2e39;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left .collapse-icon[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .section-label-left span[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-b17e86c2]:hover,body.dark,body.realdark{background:#2a2e39;border-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-b17e86c2],body.dark,body.realdark{border-color:#52c41a;background:#1e3a1e}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active[data-v-b17e86c2]:hover,body.dark,body.realdark{border-color:#73d13d;-webkit-box-shadow:0 2px 8px rgba(82,196,26,.3);box-shadow:0 2px 8px rgba(82,196,26,.3)}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.indicator-active .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-desc[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .card-params[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-b17e86c2],body.dark,body.realdark{color:#ff4d4f}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.delete-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#ff7875}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-b17e86c2],body.dark,body.realdark{color:#b37feb}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#d3adf7}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-b17e86c2],body.dark,body.realdark{color:#5cdbd3}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.backtest-history-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#87e8de}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-b17e86c2],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon.published[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#73d13d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.toggle-icon.active[data-v-b17e86c2],body.dark,body.realdark{color:#52c41a}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .empty-indicators[data-v-b17e86c2],body.dark,body.realdark{color:#868993}@media (max-width:768px){.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-header .current-symbol[data-v-b17e86c2],body.dark,body.realdark{border-top-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-left[data-v-b17e86c2],body.dark,body.realdark{border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right[data-v-b17e86c2],body.dark,body.realdark{border-top-color:#2a2e39;max-height:500px!important}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-bar,body.dark,body.realdark{border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab,body.dark,body.realdark{color:#868993}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-tab-active,body.dark,body.realdark{color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs[data-v-b17e86c2] .ant-tabs-ink-bar,body.dark,body.realdark{background-color:#1890ff}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .mobile-indicator-tabs .mobile-create-btn-wrapper[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price[data-v-b17e86c2],body.dark,body.realdark{background:#1e222d;border-bottom-color:#2a2e39}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-symbol-label[data-v-b17e86c2],body.dark,body.realdark{margin-left:5px;color:#d1d4dc}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-market-tag[data-v-b17e86c2],body.dark,body.realdark{color:#868993;background:#2a3932}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-up[data-v-b17e86c2],body.dark,body.realdark{color:#0ecb81}.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .mobile-symbol-price .mobile-price-info.color-down[data-v-b17e86c2],body.dark,body.realdark{color:#f6465d}}.add-stock-modal-content .market-tabs[data-v-b17e86c2]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-b17e86c2],.add-stock-modal-content .search-results-section[data-v-b17e86c2],.add-stock-modal-content .symbol-search-section[data-v-b17e86c2]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-b17e86c2],.add-stock-modal-content .search-results-section .section-title[data-v-b17e86c2]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-b17e86c2]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-b17e86c2]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-b17e86c2]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-b17e86c2]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-b17e86c2]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-b17e86c2]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.chart-container.theme-dark .add-stock-modal-content .hot-symbols-section .section-title[data-v-b17e86c2],.chart-container.theme-dark .add-stock-modal-content .search-results-section .section-title[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list[data-v-b17e86c2],body.dark,body.realdark{border-color:#363c4e;background-color:#2a2e39}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item[data-v-b17e86c2]:hover,body.dark,body.realdark{background-color:#363c4e}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-b17e86c2],body.dark,body.realdark{color:#d1d4dc}.chart-container.theme-dark .add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-b17e86c2],body.dark,body.realdark{color:#868993}.params-config-modal .indicator-info[data-v-b17e86c2]{text-align:center;margin-bottom:8px}.params-config-modal .indicator-info .indicator-name[data-v-b17e86c2]{font-size:16px;font-weight:600;color:#1f1f1f}.params-config-modal .params-form .param-item[data-v-b17e86c2]{margin-bottom:16px}.params-config-modal .params-form .param-item .param-header[data-v-b17e86c2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:6px}.params-config-modal .params-form .param-item .param-header .param-label[data-v-b17e86c2]{font-weight:500;color:#333}.theme-dark .params-config-modal .indicator-info .indicator-name[data-v-b17e86c2]{color:#e0e0e0}.theme-dark .params-config-modal .params-form .param-item .param-header .param-label[data-v-b17e86c2]{color:#d0d0d0} \ No newline at end of file diff --git a/frontend/dist/css/795.752239ab.css b/frontend/dist/css/795.752239ab.css new file mode 100644 index 0000000..ffcfbe4 --- /dev/null +++ b/frontend/dist/css/795.752239ab.css @@ -0,0 +1 @@ +.settings-page[data-v-f144964c]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.settings-page .restart-alert[data-v-f144964c]{margin-bottom:16px;border-radius:8px}.settings-page .settings-header[data-v-f144964c]{margin-bottom:24px}.settings-page .settings-header .page-title[data-v-f144964c]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.settings-page .settings-header .page-title .anticon[data-v-f144964c]{font-size:28px;color:#1890ff}.settings-page .settings-header .page-desc[data-v-f144964c]{color:#64748b;font-size:14px;margin:0}.settings-page .settings-content[data-v-f144964c]{margin-bottom:80px}.settings-page .openrouter-balance-card[data-v-f144964c]{margin-bottom:20px}.settings-page .openrouter-balance-card .ant-card[data-v-f144964c]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border:1px solid #91d5ff;border-radius:8px}.settings-page .openrouter-balance-card .balance-header[data-v-f144964c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:12px}.settings-page .openrouter-balance-card .balance-header .balance-title[data-v-f144964c]{font-size:15px;font-weight:600;color:#1890ff}.settings-page .openrouter-balance-card .balance-info[data-v-f144964c]{padding:8px 0}.settings-page .openrouter-balance-card .balance-info[data-v-f144964c] .ant-statistic-title{font-size:12px;color:#666}.settings-page .openrouter-balance-card .balance-info[data-v-f144964c] .ant-statistic-content{font-size:18px}.settings-page .openrouter-balance-card .balance-info .free-tier-badge[data-v-f144964c]{margin-top:12px;text-align:right}.settings-page .openrouter-balance-card .balance-empty[data-v-f144964c]{color:#8c8c8c;font-size:13px;padding:8px 0}.settings-page .settings-collapse[data-v-f144964c]{background:transparent}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item{margin-bottom:16px;border:none;border-radius:12px;overflow:hidden;background:#fff;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header{font-size:16px;font-weight:600;color:#1e3a5f;padding:16px 24px;padding-left:48px;background:linear-gradient(135deg,#fff,#f8fafc);border-bottom:1px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .ant-collapse-arrow{color:#1890ff;left:20px}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{font-size:18px;color:#1890ff}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{font-size:16px}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content{border-top:none}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{padding:24px}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label{padding-bottom:4px}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label label{color:#475569;font-weight:500}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-ms-flex-wrap:wrap;flex-wrap:wrap}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .label-text{color:#475569;font-weight:500}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon{font-size:14px;color:#94a3b8;cursor:help;-webkit-transition:color .2s;transition:color .2s}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#1890ff}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link{font-size:12px;font-weight:400;color:#1890ff;text-decoration:none;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:2px 8px;background:rgba(24,144,255,.08);border-radius:4px;-webkit-transition:all .2s;transition:all .2s;margin-left:4px}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.15);color:#0076e4}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link .anticon{font-size:11px}.settings-page .settings-form[data-v-f144964c] .ant-input,.settings-page .settings-form[data-v-f144964c] .ant-input-number,.settings-page .settings-form[data-v-f144964c] .ant-select-selection{border-radius:8px}.settings-page .settings-form[data-v-f144964c] .ant-input-number{width:100%}.settings-page .settings-form .password-field .field-hint[data-v-f144964c]{margin-top:4px;font-size:12px;color:#52c41a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.settings-page .settings-form .field-default[data-v-f144964c]{margin-top:4px;font-size:12px;color:#94a3b8}.settings-page .settings-footer[data-v-f144964c]{position:fixed;bottom:0;left:208px;right:0;padding:16px 24px;background:#fff;-webkit-box-shadow:0 -4px 20px rgba(0,0,0,.08);box-shadow:0 -4px 20px rgba(0,0,0,.08);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px;z-index:100}.settings-page .settings-footer .ant-btn[data-v-f144964c]{min-width:100px;height:40px;border-radius:8px;font-weight:500}.settings-page.theme-dark[data-v-f144964c]{background:-webkit-gradient(linear,left top,left bottom,from(#141414),to(#1c1c1c));background:linear-gradient(180deg,#141414,#1c1c1c)}.settings-page.theme-dark .restart-alert[data-v-f144964c]{background:#1c1c1c;border-color:#b08800}.settings-page.theme-dark .settings-header .page-title[data-v-f144964c]{color:#e0e6ed}.settings-page.theme-dark .settings-header .page-desc[data-v-f144964c]{color:#8b949e}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item{background:#1c1c1c;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header{background:linear-gradient(135deg,#252525,#1c1c1c);color:#e0e6ed;border-bottom-color:hsla(0,0%,100%,.06)}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{color:#58a6ff}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{color:#e0e6ed}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content,.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{background:#1c1c1c}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .label-text,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label label{color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon{color:#6e7681}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link{background:rgba(24,144,255,.15);color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.25)}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection:hover{border-color:#1890ff}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number-input{background:transparent;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-arrow{color:#8b949e}.settings-page.theme-dark .settings-form .field-default[data-v-f144964c]{color:#6e7681}.settings-page.theme-dark .settings-footer[data-v-f144964c]{background:#1c1c1c;border-top:1px solid hsla(0,0%,100%,.06);-webkit-box-shadow:0 -4px 24px rgba(0,0,0,.25);box-shadow:0 -4px 24px rgba(0,0,0,.25)}@media (max-width:768px){.settings-page[data-v-f144964c]{padding:16px}.settings-page .settings-footer[data-v-f144964c]{left:0;padding:12px 16px}} \ No newline at end of file diff --git a/frontend/dist/css/798.c66b70a6.css b/frontend/dist/css/798.c66b70a6.css new file mode 100644 index 0000000..07a455f --- /dev/null +++ b/frontend/dist/css/798.c66b70a6.css @@ -0,0 +1 @@ +.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.polymarket-analysis-modal .input-section .input-actions[data-v-67e891d2]{margin-top:12px}.polymarket-analysis-modal .result-section .market-info[data-v-67e891d2]{margin-bottom:24px}.polymarket-analysis-modal .result-section .market-info h3[data-v-67e891d2]{margin-bottom:12px;font-size:18px;font-weight:600}.polymarket-analysis-modal .result-section .market-info .market-meta[data-v-67e891d2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;-ms-flex-wrap:wrap;flex-wrap:wrap}.polymarket-analysis-modal .result-section .market-info .market-meta .meta-item[data-v-67e891d2]{color:rgba(0,0,0,.65);font-size:14px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison[data-v-67e891d2]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item[data-v-67e891d2]{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-label[data-v-67e891d2]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value[data-v-67e891d2]{font-size:24px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.ai-prob[data-v-67e891d2]{color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-positive[data-v-67e891d2]{color:#52c41a}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-negative[data-v-67e891d2]{color:#ff4d4f}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-neutral[data-v-67e891d2]{color:rgba(0,0,0,.65)}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section[data-v-67e891d2]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card[data-v-67e891d2]{text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-label[data-v-67e891d2]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-value[data-v-67e891d2]{font-size:24px;font-weight:600;color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section[data-v-67e891d2],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section[data-v-67e891d2]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section h4[data-v-67e891d2],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section h4[data-v-67e891d2]{margin-bottom:12px;font-size:16px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section .reasoning-text[data-v-67e891d2],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section .reasoning-text[data-v-67e891d2]{line-height:1.8;color:rgba(0,0,0,.85);white-space:pre-wrap}.polymarket-analysis-modal .result-section .result-actions[data-v-67e891d2]{margin-top:24px;text-align:right}.polymarket-analysis-modal .loading-section[data-v-67e891d2]{text-align:center;padding:40px 0}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-bar{border-bottom-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-tab{color:#a3a3a3!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-tab-active{color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-tabs-ink-bar{background:#58a6ff!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-divider{color:#d4d4d4;border-top-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-divider-inner-text{color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input,.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input-affix-wrapper,.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input-number,.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-input-textarea textarea{background:#141414!important;border-color:#2a2a2a!important;color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-table{background:#1c1c1c;color:#d4d4d4}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-table-thead>tr>th{background:#252525;color:#d4d4d4;border-bottom-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-table-tbody>tr>td{background:#1c1c1c;color:#d4d4d4;border-bottom-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-btn-link{color:#58a6ff!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-alert{background:#1c1c1c;border-color:#2a2a2a}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-alert-message{color:#d4d4d4!important}.polymarket-analysis-modal.theme-dark[data-v-67e891d2] .ant-alert-description{color:#a3a3a3!important}.polymarket-analysis-modal.theme-dark .market-info h3[data-v-67e891d2]{color:#d4d4d4}.polymarket-analysis-modal.theme-dark .market-info .market-meta .meta-item[data-v-67e891d2]{color:#a3a3a3}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item[data-v-67e891d2]{background:#252525;border:1px solid #2a2a2a}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item .prob-label[data-v-67e891d2]{color:#a3a3a3}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item .prob-value[data-v-67e891d2]{color:#e5e5e5}.polymarket-analysis-modal.theme-dark .analysis-result .probability-comparison .prob-item .prob-value.divergence-neutral[data-v-67e891d2]{color:#b3b3b3}.polymarket-analysis-modal.theme-dark .analysis-result .recommendation-section .rec-card[data-v-67e891d2]{background:#252525;border:1px solid #2a2a2a}.polymarket-analysis-modal.theme-dark .analysis-result .recommendation-section .rec-card .rec-label[data-v-67e891d2]{color:#a3a3a3}.polymarket-analysis-modal.theme-dark .analysis-result .recommendation-section .rec-card .rec-value[data-v-67e891d2]{color:#e5e5e5}.polymarket-analysis-modal.theme-dark .analysis-result .key-factors-section .reasoning-text[data-v-67e891d2],.polymarket-analysis-modal.theme-dark .analysis-result .key-factors-section h4[data-v-67e891d2],.polymarket-analysis-modal.theme-dark .analysis-result .reasoning-section .reasoning-text[data-v-67e891d2],.polymarket-analysis-modal.theme-dark .analysis-result .reasoning-section h4[data-v-67e891d2]{color:#d4d4d4}.ai-asset-analysis-page[data-v-443699fa]{padding:16px;min-height:calc(100vh - 120px);background:#f0f2f5}.ai-asset-analysis-page .opp-section[data-v-443699fa]{margin-bottom:12px}.ai-asset-analysis-page .opp-section .opp-header[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:8px;padding:0 4px}.ai-asset-analysis-page .opp-section .opp-header .opp-title[data-v-443699fa]{font-size:14px;font-weight:600;color:#1a1a2e}.ai-asset-analysis-page .opp-section .opp-header .opp-header-right[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.ai-asset-analysis-page .opp-section .opp-header .opp-update-hint[data-v-443699fa]{font-size:12px;color:#8c8c8c}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]{overflow:hidden;position:relative;border-radius:10px}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:after,.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:before{content:"";position:absolute;top:0;bottom:0;width:40px;z-index:2;pointer-events:none}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:before{left:0;background:-webkit-gradient(linear,left top,right top,from(#f0f2f5),to(transparent));background:linear-gradient(90deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-443699fa]:after{right:0;background:-webkit-gradient(linear,right top,left top,from(#f0f2f5),to(transparent));background:linear-gradient(270deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-track[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-animation:opp-scroll-left-443699fa 60s linear infinite;animation:opp-scroll-left-443699fa 60s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content;padding:4px 0}.ai-asset-analysis-page .opp-section .opp-track.paused[data-v-443699fa]{-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes opp-scroll-left-443699fa{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes opp-scroll-left-443699fa{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.ai-asset-analysis-page .opp-section .opp-card[data-v-443699fa]{width:190px;background:#fff;border-radius:10px;padding:12px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06);cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-left:3px solid #d9d9d9;-ms-flex-negative:0;flex-shrink:0}.ai-asset-analysis-page .opp-section .opp-card.is-prediction-market[data-v-443699fa]{width:280px;min-height:160px}.ai-asset-analysis-page .opp-section .opp-card.bullish[data-v-443699fa]{border-left-color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card.bearish[data-v-443699fa]{border-left-color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card.market-predictionmarket[data-v-443699fa]{border-left-color:#13c2c2;background:linear-gradient(135deg,#fff,#f0f9ff)}.ai-asset-analysis-page .opp-section .opp-card[data-v-443699fa]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(0,0,0,.1);box-shadow:0 4px 12px rgba(0,0,0,.1)}.ai-asset-analysis-page .opp-section .opp-card .opp-top[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:6px;gap:8px}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol[data-v-443699fa]{font-weight:700;font-size:14px;color:#1a1a2e;-webkit-box-flex:1;-ms-flex:1;flex:1;word-break:break-word;line-height:1.4}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol.prediction-title[data-v-443699fa]{font-size:13px;font-weight:600;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.ai-asset-analysis-page .opp-section .opp-card .opp-market-tag[data-v-443699fa]{font-size:11px;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.ai-asset-analysis-page .opp-section .opp-card .opp-price[data-v-443699fa]{font-size:13px;color:#595959}.ai-asset-analysis-page .opp-section .opp-card .opp-change[data-v-443699fa]{font-size:15px;font-weight:600}.ai-asset-analysis-page .opp-section .opp-card .opp-change.up[data-v-443699fa]{color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card .opp-change.down[data-v-443699fa]{color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card .opp-signal[data-v-443699fa]{margin-top:4px}.ai-asset-analysis-page .opp-section .opp-card .opp-reason[data-v-443699fa]{font-size:11px;color:#8c8c8c;margin-top:4px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ai-asset-analysis-page .opp-section .opp-card .opp-actions[data-v-443699fa]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:6px;gap:6px}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-443699fa]{font-size:12px;color:#1890ff;font-weight:500;cursor:pointer}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-443699fa]:hover{text-decoration:underline}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-443699fa]{font-size:11px;color:#fff;background:linear-gradient(135deg,#1890ff,#722ed1);padding:2px 8px;border-radius:10px;font-weight:600;cursor:pointer;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-443699fa]:hover{-webkit-transform:scale(1.05);transform:scale(1.05);-webkit-box-shadow:0 2px 8px rgba(114,46,209,.3);box-shadow:0 2px 8px rgba(114,46,209,.3)}.ai-asset-analysis-page .qt-floating-btn[data-v-443699fa]{position:fixed;right:24px;bottom:80px;width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:24px;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:1000;-webkit-transition:all .3s;transition:all .3s;-webkit-animation:qt-float-pulse-443699fa 2s ease-in-out infinite;animation:qt-float-pulse-443699fa 2s ease-in-out infinite}.ai-asset-analysis-page .qt-floating-btn[data-v-443699fa]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(114,46,209,.5);box-shadow:0 6px 24px rgba(114,46,209,.5)}@-webkit-keyframes qt-float-pulse-443699fa{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}@keyframes qt-float-pulse-443699fa{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}.ai-asset-analysis-page .workspace-card[data-v-443699fa]{border-radius:12px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.06);box-shadow:0 1px 4px rgba(0,0,0,.06)}.ai-asset-analysis-page .workspace-card[data-v-443699fa] .ant-card-body{padding:0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-bar{margin-bottom:0;padding:0 16px;border-bottom:1px solid #f0f0f0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab{font-size:15px;padding:14px 16px}.ai-asset-analysis-page .workspace-card .tab-body[data-v-443699fa] .ai-analysis-container.embedded,.ai-asset-analysis-page .workspace-card .tab-body[data-v-443699fa] .portfolio-container.embedded{border-radius:0;overflow:hidden}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content[data-v-443699fa]{padding:40px 20px;text-align:center}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder .placeholder-icon[data-v-443699fa]{font-size:64px;color:#1890ff;margin-bottom:24px}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder h3[data-v-443699fa]{font-size:20px;font-weight:600;margin-bottom:12px;color:rgba(0,0,0,.85)}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder p[data-v-443699fa]{font-size:14px;color:rgba(0,0,0,.65);margin-bottom:24px}.ai-asset-analysis-page.theme-dark[data-v-443699fa]{background:#141414}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-title[data-v-443699fa]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-update-hint[data-v-443699fa]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-443699fa]:before{background:-webkit-gradient(linear,left top,right top,from(#141414),to(transparent));background:linear-gradient(90deg,#141414,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-443699fa]:after{background:-webkit-gradient(linear,right top,left top,from(#141414),to(transparent));background:linear-gradient(270deg,#141414,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-443699fa]{background:#1c1c1c;border-color:#2a2a2a;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card.market-predictionmarket[data-v-443699fa]{background:linear-gradient(135deg,#1c1c1c,#141414);border-left-color:#13c2c2}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-symbol[data-v-443699fa]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-price[data-v-443699fa],.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-reason[data-v-443699fa]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-action[data-v-443699fa]{color:#58a6ff}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-trade-btn[data-v-443699fa]{background:linear-gradient(135deg,#58a6ff,#8957e5)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-443699fa]:hover{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.4);box-shadow:0 4px 12px rgba(0,0,0,.4)}.ai-asset-analysis-page.theme-dark .workspace-card[data-v-443699fa]{background:#1c1c1c;border-color:#2a2a2a}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-bar{border-bottom-color:#2a2a2a}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab{color:#8b949e}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab:hover{color:#c9d1d9}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-tab-active{color:#58a6ff}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-443699fa] .ant-tabs-ink-bar{background-color:#58a6ff}.ai-asset-analysis-page.theme-dark .workspace-card .polymarket-tab-content .polymarket-placeholder h3[data-v-443699fa]{color:#d4d4d4}.ai-asset-analysis-page.theme-dark .workspace-card .polymarket-tab-content .polymarket-placeholder p[data-v-443699fa]{color:#a3a3a3} \ No newline at end of file diff --git a/frontend/dist/css/805.ff086137.css b/frontend/dist/css/805.ff086137.css new file mode 100644 index 0000000..cd4ae9d --- /dev/null +++ b/frontend/dist/css/805.ff086137.css @@ -0,0 +1 @@ +.fast-analysis-report[data-v-75da11ec]{height:100%;overflow-y:auto;padding:20px;background:linear-gradient(135deg,#f5f7fa,#e4e8ec);border-radius:12px}.fast-analysis-report .loading-container[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px;background:#fff;border-radius:12px}.fast-analysis-report .loading-container .loading-content-pro[data-v-75da11ec]{width:100%;max-width:400px;padding:40px}.fast-analysis-report .loading-container .loading-content-pro .loading-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:12px;margin-bottom:32px}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-icon-pro[data-v-75da11ec]{font-size:28px;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-title[data-v-75da11ec]{font-size:20px;font-weight:600;color:#1e293b}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper[data-v-75da11ec]{margin-bottom:24px;position:relative}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper .progress-text[data-v-75da11ec]{position:absolute;right:0;top:-24px;font-size:14px;font-weight:600;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .current-step[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px;padding:12px 20px;background:#f0f5ff;border-radius:8px;margin-bottom:24px;color:#1890ff;font-size:14px;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .current-step .anticon[data-v-75da11ec]{font-size:16px}.fast-analysis-report .loading-container .loading-content-pro .steps-list[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:10px 16px;background:#f8fafc;border-radius:8px;font-size:13px;color:#94a3b8;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-dot[data-v-75da11ec]{width:8px;height:8px;border-radius:50%;background:#e2e8f0;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-text[data-v-75da11ec]{-webkit-box-flex:1;-ms-flex:1;flex:1}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-check[data-v-75da11ec]{color:#52c41a;font-size:14px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active[data-v-75da11ec]{background:#e6f7ff;color:#1890ff;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active .step-dot[data-v-75da11ec]{background:#1890ff;-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.2);box-shadow:0 0 0 3px rgba(24,144,255,.2)}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done[data-v-75da11ec]{background:#f6ffed;color:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done .step-dot[data-v-75da11ec]{background:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .loading-footer[data-v-75da11ec]{margin-top:24px;text-align:center}.fast-analysis-report .loading-container .loading-content-pro .loading-footer .elapsed-time[data-v-75da11ec]{font-size:13px;color:#94a3b8;font-family:SF Mono,Monaco,monospace}.fast-analysis-report .empty-container[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px}.fast-analysis-report .empty-container .empty-content[data-v-75da11ec]{text-align:center}.fast-analysis-report .empty-container .empty-content .empty-icon[data-v-75da11ec]{font-size:64px;color:#d9d9d9}.fast-analysis-report .empty-container .empty-content .empty-title[data-v-75da11ec]{margin-top:16px;font-size:18px;font-weight:600;color:#262626}.fast-analysis-report .empty-container .empty-content .empty-hint[data-v-75da11ec]{margin-top:8px;color:#8c8c8c}.fast-analysis-report .result-container .decision-card[data-v-75da11ec]{background:#fff;border-radius:16px;padding:24px;margin-bottom:20px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.08);box-shadow:0 4px 12px rgba(0,0,0,.08);border-left:6px solid #1890ff}.fast-analysis-report .result-container .decision-card.decision-buy[data-v-75da11ec]{border-left-color:#52c41a;background:linear-gradient(135deg,#f6ffed,#fff)}.fast-analysis-report .result-container .decision-card.decision-sell[data-v-75da11ec]{border-left-color:#ff4d4f;background:linear-gradient(135deg,#fff2f0,#fff)}.fast-analysis-report .result-container .decision-card.decision-hold[data-v-75da11ec]{border-left-color:#faad14;background:linear-gradient(135deg,#fffbe6,#fff)}.fast-analysis-report .result-container .decision-card .decision-main[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:16px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .anticon[data-v-75da11ec]{font-size:32px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .decision-text[data-v-75da11ec]{font-size:36px;font-weight:800;letter-spacing:2px}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring[data-v-75da11ec]{text-align:center}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-value[data-v-75da11ec]{font-size:18px;font-weight:700}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-label[data-v-75da11ec]{font-size:12px;color:#8c8c8c;margin-top:4px}.fast-analysis-report .result-container .decision-card .decision-summary[data-v-75da11ec]{font-size:16px;line-height:1.6;color:#595959;padding-top:16px;border-top:1px dashed #e8e8e8}.fast-analysis-report .result-container .decision-card .consensus-strip[data-v-75da11ec]{margin-top:14px;padding:12px 14px;border-radius:8px;background:rgba(24,144,255,.06);border:1px solid rgba(24,144,255,.2);font-size:13px;color:#434343}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:8px;color:#1890ff}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:12px 20px}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-75da11ec]{font-style:normal;color:#8c8c8c;margin-right:6px}.fast-analysis-report .result-container .price-info-row[data-v-75da11ec]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .price-info-row .price-card[data-v-75da11ec]{background:#fff;border-radius:12px;padding:16px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .price-info-row .price-card .price-label[data-v-75da11ec]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .price-info-row .price-card .price-value[data-v-75da11ec]{font-size:18px;font-weight:700;color:#262626}.fast-analysis-report .result-container .price-info-row .price-card .price-value.positive[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-value.negative[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card .price-hint[data-v-75da11ec]{font-size:10px;color:#bfbfbf;margin-top:6px;cursor:help}.fast-analysis-report .result-container .price-info-row .price-card .price-hint .anticon[data-v-75da11ec]{margin-right:2px}.fast-analysis-report .result-container .price-info-row .price-card .price-change[data-v-75da11ec]{font-size:14px;margin-top:4px;font-weight:600}.fast-analysis-report .result-container .price-info-row .price-card .price-change.positive[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-change.negative[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.current[data-v-75da11ec]{border-top:3px solid #1890ff}.fast-analysis-report .result-container .price-info-row .price-card.entry[data-v-75da11ec]{border-top:3px solid #722ed1}.fast-analysis-report .result-container .price-info-row .price-card.stop[data-v-75da11ec]{border-top:3px solid #ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.target[data-v-75da11ec]{border-top:3px solid #52c41a}.fast-analysis-report .result-container .trend-outlook-card[data-v-75da11ec]{background:#fff;border-radius:12px;padding:16px 20px;margin-bottom:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06);border-left:4px solid #722ed1}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:15px;font-weight:600;color:#262626;margin-bottom:10px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-header .anticon[data-v-75da11ec]{color:#722ed1}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-summary[data-v-75da11ec]{font-size:13px;line-height:1.65;color:#595959;margin-bottom:14px;padding:10px 12px;background:#fafafa;border-radius:8px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-grid[data-v-75da11ec]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item[data-v-75da11ec]{background:#fafafa;border-radius:8px;padding:10px 12px;text-align:center}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-label[data-v-75da11ec]{font-size:11px;color:#8c8c8c;margin-bottom:6px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend[data-v-75da11ec]{font-size:14px;font-weight:700;margin-bottom:6px}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend.trend-bull[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend.trend-bear[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-trend.trend-neutral[data-v-75da11ec]{color:#faad14}.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-item .to-meta[data-v-75da11ec]{font-size:11px;color:#8c8c8c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px}@media (max-width:992px){.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-grid[data-v-75da11ec]{grid-template-columns:repeat(2,1fr)}}@media (max-width:576px){.fast-analysis-report .result-container .trend-outlook-card .trend-outlook-grid[data-v-75da11ec]{grid-template-columns:1fr}}.fast-analysis-report .result-container .scores-row[data-v-75da11ec]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .scores-row .score-item[data-v-75da11ec]{background:#fff;border-radius:12px;padding:16px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .scores-row .score-item .score-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .scores-row .score-item .score-header .anticon[data-v-75da11ec]{color:#1890ff}.fast-analysis-report .result-container .scores-row .score-item .score-value[data-v-75da11ec]{text-align:right;font-size:20px;font-weight:700;color:#262626;margin-top:8px}.fast-analysis-report .result-container .scores-row .score-item.overall[data-v-75da11ec]{background:linear-gradient(135deg,#e6f7ff,#fff);border:1px solid #91d5ff}.fast-analysis-report .result-container .detailed-analysis[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card[data-v-75da11ec]{background:linear-gradient(135deg,#fff,#fafafa);border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.06);box-shadow:0 2px 12px rgba(0,0,0,.06);border-left:4px solid #1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.technical[data-v-75da11ec]{border-left-color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.fundamental[data-v-75da11ec]{border-left-color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card.sentiment[data-v-75da11ec]{border-left-color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;margin-bottom:14px;font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header .anticon[data-v-75da11ec]{font-size:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.technical .anticon[data-v-75da11ec]{color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.fundamental .anticon[data-v-75da11ec]{color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.sentiment .anticon[data-v-75da11ec]{color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-content[data-v-75da11ec]{font-size:14px;line-height:1.8;color:#595959;text-align:justify}.fast-analysis-report .result-container .analysis-details[data-v-75da11ec]{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.fast-analysis-report .result-container .analysis-details .detail-section[data-v-75da11ec]{background:#fff;border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .analysis-details .detail-section .section-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:16px;font-weight:600;margin-bottom:16px;color:#262626}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list[data-v-75da11ec]{list-style:none;padding:0;margin:0}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]{padding:10px 0;border-bottom:1px solid #f0f0f0;font-size:14px;line-height:1.6;color:#595959}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]:last-child{border-bottom:none}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]:before{content:"•";margin-right:8px;color:#1890ff}.fast-analysis-report .result-container .analysis-details .detail-section.reasons[data-v-75da11ec]{border-left:4px solid #52c41a}.fast-analysis-report .result-container .analysis-details .detail-section.risks[data-v-75da11ec]{border-left:4px solid #faad14}.fast-analysis-report .result-container .indicators-section[data-v-75da11ec]{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .indicators-section .section-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:8px;font-size:16px;font-weight:600;margin-bottom:10px;color:#262626}.fast-analysis-report .result-container .indicators-section .section-title .anticon[data-v-75da11ec]{color:#1890ff}.fast-analysis-report .result-container .indicators-section .section-title .indicators-pro-badge[data-v-75da11ec]{margin:0;font-size:11px;line-height:18px;font-weight:500}.fast-analysis-report .result-container .indicators-section .indicators-methodology[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;gap:8px;font-size:12px;line-height:1.55;color:#595959;margin-bottom:16px;padding:10px 12px;background:-webkit-gradient(linear,left top,right top,from(#f0f5ff),to(#fafafa));background:linear-gradient(90deg,#f0f5ff,#fafafa);border-radius:8px;border:1px solid #e6f0ff}.fast-analysis-report .result-container .indicators-section .indicators-methodology .anticon[data-v-75da11ec]{color:#2f54eb;margin-top:2px}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap[data-v-75da11ec]{margin-top:20px;padding-top:16px;border-top:1px dashed #e8e8e8}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:13px;font-weight:600;color:#434343;margin-bottom:12px}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec]{color:#722ed1}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-label[data-v-75da11ec]{font-size:12px;color:#8c8c8c;width:38%;font-weight:500}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content[data-v-75da11ec]{font-size:12px;font-family:SF Mono,Consolas,monospace}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec]{color:#52c41a;font-weight:600}.fast-analysis-report .result-container .indicators-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec]{color:#ff4d4f;font-weight:600}.fast-analysis-report .result-container .indicators-section .indicators-grid[data-v-75da11ec]{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item[data-v-75da11ec]{background:#fafafa;border-radius:8px;padding:12px;text-align:center}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-name[data-v-75da11ec]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value[data-v-75da11ec]{font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bullish[data-v-75da11ec],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.oversold[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bearish[data-v-75da11ec],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.high-volatility[data-v-75da11ec],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.overbought[data-v-75da11ec]{color:#ff4d4f}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.low-volatility[data-v-75da11ec]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-signal[data-v-75da11ec]{font-size:11px;color:#8c8c8c;margin-top:4px;text-transform:capitalize}.fast-analysis-report .result-container .feedback-section[data-v-75da11ec]{background:#fff;border-radius:12px;padding:20px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .feedback-section .feedback-question[data-v-75da11ec]{font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .feedback-section .feedback-buttons[data-v-75da11ec]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px;margin-bottom:16px}.fast-analysis-report .result-container .feedback-section .feedback-buttons .ant-btn[data-v-75da11ec]{min-width:100px}.fast-analysis-report .result-container .feedback-section .analysis-meta[data-v-75da11ec]{font-size:12px;color:#8c8c8c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px}@media (max-width:992px){.fast-analysis-report .price-info-row[data-v-75da11ec],.fast-analysis-report .scores-row[data-v-75da11ec]{grid-template-columns:repeat(2,1fr)}.fast-analysis-report .analysis-details[data-v-75da11ec]{grid-template-columns:1fr}}@media (max-width:576px){.fast-analysis-report[data-v-75da11ec]{padding:12px}.fast-analysis-report .price-info-row[data-v-75da11ec],.fast-analysis-report .scores-row[data-v-75da11ec]{grid-template-columns:1fr}.fast-analysis-report .decision-card[data-v-75da11ec]{padding:16px}.fast-analysis-report .decision-card .decision-main[data-v-75da11ec]{gap:16px;text-align:center}.fast-analysis-report .decision-card .decision-main .decision-badge[data-v-75da11ec],.fast-analysis-report .decision-card .decision-main[data-v-75da11ec]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fast-analysis-report .decision-card .decision-main .decision-badge .decision-text[data-v-75da11ec]{font-size:28px}}.fast-analysis-report.theme-dark[data-v-75da11ec]{background:linear-gradient(135deg,#141414,#1c1c1c)}.fast-analysis-report.theme-dark .loading-content .loading-text[data-v-75da11ec]{color:#00e5ff}.fast-analysis-report.theme-dark .empty-content .empty-title[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card[data-v-75da11ec]{background:#1c1c1c;border-left-color:#1890ff}.fast-analysis-report.theme-dark .decision-card.decision-buy[data-v-75da11ec]{background:linear-gradient(135deg,rgba(82,196,26,.1),#1c1c1c)}.fast-analysis-report.theme-dark .decision-card.decision-sell[data-v-75da11ec]{background:linear-gradient(135deg,rgba(255,77,79,.1),#1c1c1c)}.fast-analysis-report.theme-dark .decision-card.decision-hold[data-v-75da11ec]{background:linear-gradient(135deg,rgba(250,173,20,.1),#1c1c1c)}.fast-analysis-report.theme-dark .decision-card .confidence-ring .confidence-value[data-v-75da11ec]{color:#e5e5e5}.fast-analysis-report.theme-dark .decision-card .confidence-ring .confidence-label[data-v-75da11ec]{color:#a3a3a3}.fast-analysis-report.theme-dark .decision-card .decision-summary[data-v-75da11ec]{color:#868993;border-top-color:#363c4e}.fast-analysis-report.theme-dark .decision-card .consensus-strip[data-v-75da11ec]{background:rgba(24,144,255,.12);border-color:rgba(24,144,255,.35);color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-title[data-v-75da11ec]{color:#69c0ff}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card[data-v-75da11ec]{background:linear-gradient(135deg,#1c1c1c,#141414)}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.technical[data-v-75da11ec]{border-left-color:#1890ff}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.fundamental[data-v-75da11ec]{border-left-color:#722ed1}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.sentiment[data-v-75da11ec]{border-left-color:#eb2f96}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-header[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-content[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .trend-outlook-card[data-v-75da11ec]{background:#1c1c1c;border-left-color:#b37feb}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-header[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-header .anticon[data-v-75da11ec]{color:#b37feb}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-summary[data-v-75da11ec]{background:#252525;color:#868993}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-item[data-v-75da11ec]{background:#252525}.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-item .to-label[data-v-75da11ec],.fast-analysis-report.theme-dark .trend-outlook-card .trend-outlook-item .to-meta[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detail-section[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item[data-v-75da11ec]{background:#1c1c1c;color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-methodology[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-methodology[data-v-75da11ec]{background:-webkit-gradient(linear,left top,right top,from(hsla(0,0%,47%,.12)),to(#252525));background:linear-gradient(90deg,hsla(0,0%,47%,.12),#252525);border-color:hsla(0,0%,71%,.2);color:#868993}.fast-analysis-report.theme-dark .detail-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-methodology .anticon[data-v-75da11ec]{color:#69c0ff}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap[data-v-75da11ec]{border-top-color:#2a2a2a}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-title[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-title .anticon[data-v-75da11ec]{color:#b37feb}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-content[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec]{background:#1c1c1c;border-color:#2a2a2a!important;color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-bordered .ant-descriptions-item-label[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .ant-descriptions-item-content>span[data-v-75da11ec]{color:#d1d4dc!important}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .bullish[data-v-75da11ec]{color:#73d13d}.fast-analysis-report.theme-dark .detail-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-pro-wrap .indicators-pro-desc .bearish[data-v-75da11ec]{color:#ff7875}.fast-analysis-report.theme-dark .detail-section .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .section-title[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .analysis-meta[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .feedback-question[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicator-name[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicator-signal[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .price-label[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .score-header[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .section-title[data-v-75da11ec]{color:#868993}.fast-analysis-report.theme-dark .detail-section .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .detail-section .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .score-value[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicator-value[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .price-value[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .score-value[data-v-75da11ec]{color:#d1d4dc}.fast-analysis-report.theme-dark .score-item.overall[data-v-75da11ec]{background:linear-gradient(135deg,hsla(0,0%,47%,.12),#1c1c1c);border-color:#3a3a3a}.fast-analysis-report.theme-dark .detail-list li[data-v-75da11ec]{color:#868993;border-bottom-color:#2a2a2a}.fast-analysis-report.theme-dark .indicators-grid .indicator-item[data-v-75da11ec]{background:#252525}.ai-analysis-container[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc(100vh - 120px);background:#f0f2f5;overflow:hidden;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.ai-analysis-container.embedded[data-v-5cbe52d9]{height:auto;min-height:700px;background:transparent}.ai-analysis-container.embedded .main-content-full[data-v-5cbe52d9]{-webkit-box-shadow:none;box-shadow:none;border-radius:0}.main-content-full[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden;background:#fff;border-radius:12px;height:100%;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.08);box-shadow:0 2px 8px rgba(0,0,0,.08);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.top-index-bar[data-v-5cbe52d9]{gap:8px;padding:8px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-family:SF Mono,Monaco,Consolas,monospace}.top-index-bar .indicator-box[data-v-5cbe52d9],.top-index-bar[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.top-index-bar .indicator-box[data-v-5cbe52d9]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:4px 10px;background:#fff;border-radius:6px;border:1px solid #e2e8f0;min-width:50px}.top-index-bar .indicator-box .ind-label[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;text-transform:uppercase}.top-index-bar .indicator-box .ind-value[data-v-5cbe52d9]{font-size:13px;font-weight:700;color:#1e293b}.top-index-bar .indicator-box.fear-greed.extreme-fear .ind-value[data-v-5cbe52d9]{color:#dc2626}.top-index-bar .indicator-box.fear-greed.fear .ind-value[data-v-5cbe52d9]{color:#ea580c}.top-index-bar .indicator-box.fear-greed.neutral .ind-value[data-v-5cbe52d9]{color:#ca8a04}.top-index-bar .indicator-box.fear-greed.greed .ind-value[data-v-5cbe52d9]{color:#65a30d}.top-index-bar .indicator-box.fear-greed.extreme-greed .ind-value[data-v-5cbe52d9],.top-index-bar .indicator-box.vix.low .ind-value[data-v-5cbe52d9]{color:#16a34a}.top-index-bar .indicator-box.vix.medium .ind-value[data-v-5cbe52d9]{color:#ca8a04}.top-index-bar .indicator-box.vix.high .ind-value[data-v-5cbe52d9]{color:#dc2626}.top-index-bar .indicator-box.dxy .ind-value[data-v-5cbe52d9]{color:#2563eb}.top-index-bar .indices-marquee[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-width:0}.top-index-bar .indices-marquee .marquee-track[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;-webkit-animation:marquee-5cbe52d9 35s linear infinite;animation:marquee-5cbe52d9 35s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content}.top-index-bar .indices-marquee .marquee-track[data-v-5cbe52d9]:hover{-webkit-animation-play-state:paused;animation-play-state:paused}.top-index-bar .indices-marquee .index-item[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:4px 8px;background:#fff;border-radius:4px;border:1px solid #e2e8f0;font-size:11px;white-space:nowrap}.top-index-bar .indices-marquee .index-item .idx-flag[data-v-5cbe52d9]{font-size:11px}.top-index-bar .indices-marquee .index-item .idx-symbol[data-v-5cbe52d9]{color:#64748b;font-weight:500}.top-index-bar .indices-marquee .index-item .idx-price[data-v-5cbe52d9]{color:#1e293b;font-weight:600}.top-index-bar .indices-marquee .index-item .idx-change[data-v-5cbe52d9]{font-weight:600;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1px}.top-index-bar .indices-marquee .index-item .idx-change.up[data-v-5cbe52d9]{color:#16a34a}.top-index-bar .indices-marquee .index-item .idx-change.down[data-v-5cbe52d9]{color:#dc2626}@-webkit-keyframes marquee-5cbe52d9{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes marquee-5cbe52d9{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.top-index-bar .refresh-btn[data-v-5cbe52d9]{color:#94a3b8;-ms-flex-negative:0;flex-shrink:0}.top-index-bar .refresh-btn[data-v-5cbe52d9]:hover{color:#1e293b}.main-body[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:12px;overflow:hidden;min-height:0}.left-panel[data-v-5cbe52d9],.main-body[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.left-panel[data-v-5cbe52d9]{width:280px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow-y:auto}.left-panel .heatmap-box[data-v-5cbe52d9]{background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0}.left-panel .heatmap-box .box-header[data-v-5cbe52d9]{margin-bottom:10px}.left-panel .heatmap-box .box-header[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper{font-size:10px;padding:0 6px;height:22px;line-height:20px}.left-panel .heatmap-box .box-header[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff);color:#fff}.left-panel .heatmap-box .heatmap-grid[data-v-5cbe52d9]{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.left-panel .heatmap-box .heatmap-grid .heat-cell[data-v-5cbe52d9]{padding:6px 4px;border-radius:4px;text-align:center;font-size:9px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-name[data-v-5cbe52d9]{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-price[data-v-5cbe52d9]{display:block;font-size:9px;opacity:.8;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-val[data-v-5cbe52d9]{font-weight:700;font-size:10px}.left-panel .calendar-box[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;overflow:hidden}.left-panel .calendar-box .box-header[data-v-5cbe52d9]{margin-bottom:8px}.left-panel .calendar-box .box-header .box-title[data-v-5cbe52d9]{font-size:12px;color:#64748b;font-weight:600}.left-panel .calendar-box .box-header .box-title .anticon[data-v-5cbe52d9]{margin-right:6px;color:var(--primary-color,#1890ff)}.left-panel .calendar-box .calendar-list[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.left-panel .calendar-box .calendar-list[data-v-5cbe52d9]::-webkit-scrollbar{width:4px}.left-panel .calendar-box .calendar-list[data-v-5cbe52d9]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:2px}.left-panel .calendar-box .calendar-list .cal-item[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;padding:6px 0;border-bottom:1px solid #f1f5f9;font-size:10px}.left-panel .calendar-box .calendar-list .cal-item[data-v-5cbe52d9]:last-child{border-bottom:none}.left-panel .calendar-box .calendar-list .cal-item.high[data-v-5cbe52d9]{border-left:3px solid #dc2626;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.medium[data-v-5cbe52d9]{border-left:3px solid #ca8a04;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.low[data-v-5cbe52d9]{border-left:3px solid #16a34a;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item .cal-date[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;min-width:32px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-time[data-v-5cbe52d9]{color:#64748b;min-width:36px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-flag[data-v-5cbe52d9]{font-size:12px}.left-panel .calendar-box .calendar-list .cal-item .cal-name[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;color:#334155;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.left-panel .calendar-box .calendar-list .cal-item .cal-impact[data-v-5cbe52d9]{font-weight:600;font-size:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bullish[data-v-5cbe52d9]{color:#16a34a}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bearish[data-v-5cbe52d9]{color:#dc2626}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.neutral[data-v-5cbe52d9]{color:#94a3b8}.left-panel .calendar-box .calendar-list .cal-empty[data-v-5cbe52d9]{text-align:center;color:#94a3b8;padding:20px 0;font-size:12px}.right-panel[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.right-panel .analysis-toolbar[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #f1f5f9;background:#fafafa;border-radius:8px 8px 0 0}.right-panel .analysis-toolbar .symbol-selector[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:320px}.right-panel .analysis-toolbar .analyze-button[data-v-5cbe52d9]{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)}.right-panel .analysis-toolbar .history-button[data-v-5cbe52d9]{border-color:#d9d9d9}.right-panel .analysis-main[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;padding:16px;min-height:0}.right-panel .analysis-main .analysis-placeholder[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;min-height:300px}.watchlist-panel[data-v-5cbe52d9]{width:320px;-ms-flex-negative:0;flex-shrink:0;background:#fff;border-radius:8px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.watchlist-panel .panel-header[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #f1f5f9;background:#fafafa}.watchlist-panel .panel-header .panel-title[data-v-5cbe52d9]{font-size:12px;font-weight:600;color:#64748b}.watchlist-panel .panel-header .panel-title .anticon[data-v-5cbe52d9]{color:#facc15;margin-right:6px}.watchlist-panel .watchlist-list[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:8px}.watchlist-panel .watchlist-list[data-v-5cbe52d9]::-webkit-scrollbar{width:4px}.watchlist-panel .watchlist-list[data-v-5cbe52d9]::-webkit-scrollbar-thumb{background:#e2e8f0;border-radius:2px}.watchlist-panel .watchlist-list .watchlist-empty[data-v-5cbe52d9]{text-align:center;padding:24px 12px;color:#94a3b8}.watchlist-panel .watchlist-list .watchlist-empty .anticon[data-v-5cbe52d9]{font-size:32px;margin-bottom:8px;display:block}.watchlist-panel .watchlist-list .watchlist-empty p[data-v-5cbe52d9]{font-size:12px;margin-bottom:12px}@-webkit-keyframes pulse-5cbe52d9{0%,to{opacity:1}50%{opacity:.5}}@keyframes pulse-5cbe52d9{0%,to{opacity:1}50%{opacity:.5}}@media (max-width:992px){.ai-analysis-container[data-v-5cbe52d9]{height:auto;min-height:calc(100vh - 64px);overflow-y:auto}.main-content-full[data-v-5cbe52d9]{height:auto;min-height:auto}.top-index-bar[data-v-5cbe52d9]{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:8px}.top-index-bar .indicator-box[data-v-5cbe52d9]{min-width:45px;padding:3px 6px}.top-index-bar .indices-marquee[data-v-5cbe52d9]{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10;width:100%;margin-top:8px}.main-body[data-v-5cbe52d9]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:12px}.left-panel[data-v-5cbe52d9]{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:12px}.left-panel .calendar-box[data-v-5cbe52d9],.left-panel .heatmap-box[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.left-panel .calendar-box[data-v-5cbe52d9]{max-height:200px}.right-panel .analysis-toolbar[data-v-5cbe52d9]{-ms-flex-wrap:wrap;flex-wrap:wrap}.right-panel .analysis-toolbar .symbol-selector[data-v-5cbe52d9]{width:100%!important;max-width:none!important}.right-panel .analysis-toolbar .analyze-button[data-v-5cbe52d9],.right-panel .analysis-toolbar .history-button[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1}.watchlist-panel[data-v-5cbe52d9]{width:100%;max-height:250px;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.hero-stats[data-v-5cbe52d9]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.hero-stats .hstat[data-v-5cbe52d9]{width:100%;max-width:300px;-webkit-box-flex:0;-ms-flex:none;flex:none}}.ai-analysis-container.theme-dark[data-v-5cbe52d9]{background:#0a0a0a;color:#d4d4d4}.ai-analysis-container.theme-dark .main-content-full[data-v-5cbe52d9]{background:#141414;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.5);box-shadow:0 2px 8px rgba(0,0,0,.5)}.ai-analysis-container.theme-dark .top-index-bar[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .top-index-bar .indicator-box[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-label[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-value[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-symbol[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-price[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-5cbe52d9]:hover{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-header[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-header .panel-title[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary .summary-chip[data-v-5cbe52d9]{border-right-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary .sc-num[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel .panel-summary .sc-label[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .batch-bar[data-v-5cbe52d9]{background:hsla(0,0%,100%,.04);border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card[data-v-5cbe52d9]:hover{background:#252525}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card.active[data-v-5cbe52d9]{background:rgba(24,144,255,.08);border-color:#1890ff}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-symbol[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-market[data-v-5cbe52d9]{color:#666;background:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-price[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-pnl-qty[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-task-badge.paused[data-v-5cbe52d9]{background:#2a2a2a;color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card .wl-task-next[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#252525));background:linear-gradient(90deg,transparent,#252525 30%)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn[data-v-5cbe52d9]{background:#1c1c1c;color:#888;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn[data-v-5cbe52d9]:hover{color:#1890ff;background:rgba(24,144,255,.1)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn.danger[data-v-5cbe52d9]:hover{color:#dc2626;background:rgba(220,38,38,.1)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card.active .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,rgba(24,144,255,.06)));background:linear-gradient(90deg,transparent,rgba(24,144,255,.06) 30%)}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-empty[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .we-icon[data-v-5cbe52d9]{color:#2a2a2a}.ai-analysis-container.theme-dark .placeholder-hero .hero-bg-grid[data-v-5cbe52d9]{background-image:linear-gradient(hsla(0,0%,100%,.02) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.02) 1px,transparent 0)}.ai-analysis-container.theme-dark .placeholder-hero .hero-badge[data-v-5cbe52d9]{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.2)}.ai-analysis-container.theme-dark .placeholder-hero .hero-title[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .placeholder-hero .hero-hint[data-v-5cbe52d9],.ai-analysis-container.theme-dark .placeholder-hero .hero-subtitle[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .placeholder-hero .hstat[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a;-webkit-box-shadow:none;box-shadow:none}.ai-analysis-container.theme-dark .placeholder-hero .hstat[data-v-5cbe52d9]:hover{border-color:#1890ff;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.12);box-shadow:0 4px 16px rgba(24,144,255,.12)}.ai-analysis-container.theme-dark .placeholder-hero .hstat-icon[data-v-5cbe52d9]{background:linear-gradient(135deg,rgba(24,144,255,.12),rgba(114,46,209,.08))}.ai-analysis-container.theme-dark .placeholder-hero .hstat-val[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .placeholder-hero .hstat-label[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .placeholder-hero .hero-cta .ant-btn-primary[data-v-5cbe52d9]{-webkit-box-shadow:0 4px 14px rgba(24,144,255,.35);box-shadow:0 4px 14px rgba(24,144,255,.35)}.ai-analysis-container.theme-dark .watchlist-bar-legacy[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip.active[data-v-5cbe52d9],.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-symbol[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-price[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper{background:#141414;border-color:#2a2a2a;color:#888}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper:hover{color:#d4d4d4}.ai-analysis-container.theme-dark .left-panel .calendar-box[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .left-panel .calendar-box .box-title[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item[data-v-5cbe52d9]{border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-date[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-time[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-name[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-empty[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .right-panel[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .right-panel .analysis-toolbar[data-v-5cbe52d9]{background:#141414;border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark .hero-cta .ant-btn[data-v-5cbe52d9]:not(.ant-btn-primary),.ai-analysis-container.theme-dark .right-panel .analysis-toolbar .history-button[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark .hero-cta .ant-btn[data-v-5cbe52d9]:not(.ant-btn-primary):hover{border-color:#1890ff;color:#1890ff}.ai-analysis-container.theme-dark .wl-change.up[data-v-5cbe52d9]{background:rgba(22,163,74,.15)}.ai-analysis-container.theme-dark .wl-change.down[data-v-5cbe52d9]{background:rgba(220,38,38,.12)}.ai-analysis-container.theme-dark .panel-header-icon[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark .panel-header-icon[data-v-5cbe52d9]:hover{color:#1890ff;background:rgba(24,144,255,.08)}.ai-analysis-container.theme-dark .panel-summary[data-v-5cbe52d9]{background:#141414}.ai-analysis-container.theme-dark .batch-bar[data-v-5cbe52d9]{background:hsla(0,0%,100%,.03)!important;border-bottom-color:#2a2a2a!important}.ai-analysis-container.theme-dark .watchlist-bar-compat[data-v-5cbe52d9]{background:#141414;border-top-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-compat .bar-label[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-5cbe52d9]{background:#1c1c1c;border-color:#2a2a2a}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip.active[data-v-5cbe52d9],.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-symbol[data-v-5cbe52d9]{color:#d4d4d4}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-price[data-v-5cbe52d9]{color:#888}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-remove[data-v-5cbe52d9]{color:#666}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .symbol-selector .ant-select-selection{background-color:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-bar{border-bottom-color:#2a2a2a}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab{color:#888}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab:hover{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab-active{color:#1890ff!important}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-ink-bar{background-color:#1890ff}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::-webkit-input-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::-moz-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input:-ms-input-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::-ms-input-placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input::placeholder{color:#555}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input-number{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-input-number .ant-input-number-handler-wrap{background:#1c1c1c}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-select-selection{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-select-arrow{color:#666}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-checkbox-wrapper,.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-form-item-label>label,.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-radio-wrapper{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-btn-default:hover{border-color:#1890ff;color:#1890ff}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-alert{background:rgba(24,144,255,.06);border-color:#2a2a2a}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-alert-message{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tag{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-list-item{border-bottom-color:#2a2a2a;color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-list-item-meta-title{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-list-item-meta-description{color:#888}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-empty-description{color:#666}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tooltip-inner{background:#1c1c1c}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-badge-count{-webkit-box-shadow:0 0 0 1px #141414;box-shadow:0 0 0 1px #141414}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-popover-inner{background:#1c1c1c}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-popover-message{color:#d4d4d4}.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-popover-arrow{border-color:#1c1c1c}.placeholder-hero[data-v-5cbe52d9]{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;overflow:hidden}.hero-bg[data-v-5cbe52d9]{position:absolute;inset:0;pointer-events:none}.hero-bg-circle[data-v-5cbe52d9]{position:absolute;border-radius:50%;opacity:.5}.hero-bg-circle.c1[data-v-5cbe52d9]{width:320px;height:320px;top:-80px;right:-60px;background:radial-gradient(circle,rgba(24,144,255,.1) 0,transparent 70%);-webkit-animation:hero-float-5cbe52d9 6s ease-in-out infinite;animation:hero-float-5cbe52d9 6s ease-in-out infinite}.hero-bg-circle.c2[data-v-5cbe52d9]{width:240px;height:240px;bottom:-40px;left:-40px;background:radial-gradient(circle,rgba(114,46,209,.08) 0,transparent 70%);animation:hero-float-5cbe52d9 8s ease-in-out infinite reverse}.hero-bg-grid[data-v-5cbe52d9]{position:absolute;inset:0;background-image:linear-gradient(rgba(24,144,255,.03) 1px,transparent 0),linear-gradient(90deg,rgba(24,144,255,.03) 1px,transparent 0);background-size:32px 32px}@-webkit-keyframes hero-float-5cbe52d9{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-12px);transform:translateY(-12px)}}@keyframes hero-float-5cbe52d9{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-12px);transform:translateY(-12px)}}.hero-body[data-v-5cbe52d9]{position:relative;text-align:center;padding:40px 32px;max-width:560px}.hero-badge[data-v-5cbe52d9]{display:inline-block;padding:3px 12px;border-radius:20px;font-size:10px;font-weight:700;letter-spacing:1.5px;color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08);border:1px solid rgba(24,144,255,.2);margin-bottom:16px}.hero-title[data-v-5cbe52d9]{font-size:26px;font-weight:800;color:#0f172a;margin-bottom:8px;letter-spacing:-.3px;line-height:1.3}.hero-subtitle[data-v-5cbe52d9]{font-size:14px;color:#64748b;margin-bottom:32px;line-height:1.5}.hero-stats[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:32px;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.hstat[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;padding:12px 14px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.04);box-shadow:0 1px 3px rgba(0,0,0,.04);-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0;text-align:left;-webkit-transition:all .25s;transition:all .25s}.hstat[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.1);box-shadow:0 4px 16px rgba(24,144,255,.1);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.hstat-icon[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,rgba(24,144,255,.1),rgba(114,46,209,.08));font-size:16px;color:var(--primary-color,#1890ff);-ms-flex-negative:0;flex-shrink:0}.hstat-body[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0}.hstat-val[data-v-5cbe52d9]{font-size:12px;font-weight:700;color:#0f172a}.hstat-label[data-v-5cbe52d9],.hstat-val[data-v-5cbe52d9]{line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.hstat-label[data-v-5cbe52d9]{font-size:10px;color:#94a3b8;margin-top:1px}.hero-cta[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:16px}.hero-cta .ant-btn[data-v-5cbe52d9]{border-radius:10px;font-weight:600;height:42px;padding:0 24px;font-size:14px}.hero-cta .ant-btn-primary[data-v-5cbe52d9]{-webkit-box-shadow:0 4px 14px rgba(24,144,255,.3);box-shadow:0 4px 14px rgba(24,144,255,.3)}.hero-hint[data-v-5cbe52d9]{font-size:12px;color:#94a3b8}.panel-header-actions[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.panel-header-icon[data-v-5cbe52d9]{font-size:15px;color:#94a3b8;cursor:pointer;padding:4px;border-radius:6px;-webkit-transition:color .2s,background .2s;transition:color .2s,background .2s}.panel-header-icon[data-v-5cbe52d9]:hover{color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)}.panel-summary[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:0;padding:0;border-bottom:1px solid #f1f5f9}.summary-chip[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 4px;border-right:1px solid #f1f5f9}.summary-chip[data-v-5cbe52d9]:last-child{border-right:none}.sc-num[data-v-5cbe52d9]{font-size:14px;font-weight:700;color:#0f172a;line-height:1.2;font-family:SF Mono,Monaco,monospace}.sc-num.up[data-v-5cbe52d9]{color:#16a34a}.sc-num.down[data-v-5cbe52d9]{color:#dc2626}.sc-label[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;text-transform:uppercase;letter-spacing:.5px;margin-top:2px}.batch-bar[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:8px 12px;background:-webkit-gradient(linear,left top,right top,from(#eff6ff),to(#f0f5ff));background:linear-gradient(90deg,#eff6ff,#f0f5ff);border-bottom:1px solid #dbeafe}.batch-all-cb[data-v-5cbe52d9]{font-size:12px}.wl-card[data-v-5cbe52d9]{position:relative;padding:10px 12px;border-radius:8px;cursor:pointer;-webkit-transition:all .15s;transition:all .15s;margin-bottom:2px;border:1px solid transparent}.wl-card[data-v-5cbe52d9]:hover{background:#f8fafc}.wl-card.active[data-v-5cbe52d9]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border-color:#91d5ff}.wl-card-cb[data-v-5cbe52d9]{position:absolute;top:12px;left:4px;z-index:1}.wl-card-body[data-v-5cbe52d9]{-webkit-transition:padding-left .2s;transition:padding-left .2s}.wl-card-body.with-cb[data-v-5cbe52d9]{padding-left:24px}.wl-row-main[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;gap:5px}.wl-symbol[data-v-5cbe52d9]{font-size:13px;font-weight:700;color:#0f172a}.wl-market[data-v-5cbe52d9]{font-size:9px;color:#94a3b8;letter-spacing:.3px;padding:1px 4px;background:#f1f5f9;border-radius:3px}.wl-spacer[data-v-5cbe52d9]{-webkit-box-flex:1;-ms-flex:1;flex:1}.wl-price[data-v-5cbe52d9]{font-size:12px;font-weight:600;color:#0f172a;font-family:SF Mono,Monaco,monospace}.wl-change[data-v-5cbe52d9]{font-size:10px;font-weight:700;font-family:SF Mono,Monaco,monospace;padding:1px 5px;border-radius:4px;margin-left:4px}.wl-change.up[data-v-5cbe52d9]{color:#16a34a;background:rgba(22,163,74,.08)}.wl-change.down[data-v-5cbe52d9]{color:#dc2626;background:rgba(220,38,38,.06)}.wl-row-pnl[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;margin-top:4px;font-family:SF Mono,Monaco,monospace}.wl-pnl-qty[data-v-5cbe52d9]{font-size:10px;color:#94a3b8}.wl-pnl-val[data-v-5cbe52d9]{font-size:10px;font-weight:600;margin-left:auto}.wl-pnl-val.up[data-v-5cbe52d9]{color:#16a34a}.wl-pnl-val.down[data-v-5cbe52d9]{color:#dc2626}.wl-row-task[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:4px}.wl-row-task[data-v-5cbe52d9],.wl-task-badge[data-v-5cbe52d9]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.wl-task-badge[data-v-5cbe52d9]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;gap:3px;font-size:10px;padding:1px 8px;border-radius:10px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s}.wl-task-badge.active[data-v-5cbe52d9]{color:#16a34a;background:rgba(22,163,74,.08)}.wl-task-badge.paused[data-v-5cbe52d9]{color:#94a3b8;background:#f1f5f9}.wl-task-badge[data-v-5cbe52d9]:hover{opacity:.75}.wl-task-next[data-v-5cbe52d9]{font-size:10px;color:#94a3b8;margin-left:auto}.wl-card-hover-actions[data-v-5cbe52d9]{position:absolute;top:0;right:0;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px;padding-right:8px;opacity:0;-webkit-transition:opacity .15s;transition:opacity .15s;background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#f8fafc));background:linear-gradient(90deg,transparent,#f8fafc 30%);border-radius:0 8px 8px 0;pointer-events:none}.wl-card:hover .wl-card-hover-actions[data-v-5cbe52d9]{opacity:1;pointer-events:auto}.wl-card.active .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#e6f7ff));background:linear-gradient(90deg,transparent,#e6f7ff 30%)}.wl-hover-btn[data-v-5cbe52d9]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:26px;height:26px;border-radius:6px;font-size:13px;color:#64748b;cursor:pointer;-webkit-transition:all .15s;transition:all .15s;background:#fff;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06)}.wl-hover-btn[data-v-5cbe52d9]:hover{color:var(--primary-color,#1890ff);background:#e6f7ff}.wl-hover-btn.danger[data-v-5cbe52d9]:hover{color:#dc2626;background:#fef2f2}.watchlist-empty[data-v-5cbe52d9]{text-align:center;padding:32px 16px}.we-icon[data-v-5cbe52d9]{font-size:36px;color:#e2e8f0;margin-bottom:12px}.watchlist-empty p[data-v-5cbe52d9]{font-size:12px;color:#94a3b8;margin-bottom:12px}.batch-modal-summary[data-v-5cbe52d9]{margin-bottom:16px}.batch-modal-summary p[data-v-5cbe52d9]{font-size:13px;color:#475569;margin-bottom:8px}.batch-symbols-preview[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:4px;max-height:80px;overflow-y:auto}.task-drawer-empty[data-v-5cbe52d9]{text-align:center;padding:48px 16px;color:#94a3b8}.task-drawer-empty p[data-v-5cbe52d9]{margin-top:12px;font-size:13px}.task-drawer-list[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.task-item[data-v-5cbe52d9]{padding:14px 16px;border:1px solid #e2e8f0;border-radius:10px;background:#fafafa;-webkit-transition:-webkit-box-shadow .2s;transition:-webkit-box-shadow .2s;transition:box-shadow .2s;transition:box-shadow .2s,-webkit-box-shadow .2s}.task-item[data-v-5cbe52d9]:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.task-item-header[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:8px}.task-item-name[data-v-5cbe52d9]{font-size:13px;font-weight:600;color:#0f172a}.task-item-meta[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;font-size:12px;color:#64748b;margin-bottom:10px}.task-item-meta .anticon[data-v-5cbe52d9]{margin-right:4px}.task-item-actions[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.add-stock-modal-content .market-tabs[data-v-5cbe52d9]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-5cbe52d9],.add-stock-modal-content .search-results-section[data-v-5cbe52d9],.add-stock-modal-content .symbol-search-section[data-v-5cbe52d9]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-5cbe52d9],.add-stock-modal-content .search-results-section .section-title[data-v-5cbe52d9]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-5cbe52d9]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-5cbe52d9]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-5cbe52d9]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-5cbe52d9]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-5cbe52d9]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-5cbe52d9]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.skeleton-box .skeleton-text[data-v-5cbe52d9]{display:block;height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;border-radius:4px;margin:3px 0}.skeleton-box .skeleton-text.short[data-v-5cbe52d9]{width:40px;height:9px}.skeleton-cell[data-v-5cbe52d9]{background:#f8fafc!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:8px 4px}.skeleton-cell .skeleton-text[data-v-5cbe52d9]{width:80%;height:10px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;border-radius:3px;margin:2px 0}.skeleton-cell .skeleton-text.short[data-v-5cbe52d9]{width:50%;height:8px}.skeleton-item[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:6px 0}.skeleton-item .skeleton-text[data-v-5cbe52d9]{height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;animation:skeleton-pulse-5cbe52d9 1.5s ease-in-out infinite;border-radius:4px;-webkit-box-flex:1;-ms-flex:1;flex:1}.skeleton-item .skeleton-text.short[data-v-5cbe52d9]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:40px}.indices-empty[data-v-5cbe52d9],.indices-loading[data-v-5cbe52d9]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:11px;color:#94a3b8;padding:4px 16px}.indices-loading .anticon[data-v-5cbe52d9]{margin-right:6px}.heatmap-empty[data-v-5cbe52d9]{grid-column:-1;text-align:center;padding:20px;color:#94a3b8;font-size:12px}@-webkit-keyframes skeleton-pulse-5cbe52d9{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes skeleton-pulse-5cbe52d9{0%{background-position:200% 0}to{background-position:-200% 0}}.theme-dark .skeleton-box .skeleton-text[data-v-5cbe52d9],.theme-dark .skeleton-cell .skeleton-text[data-v-5cbe52d9],.theme-dark .skeleton-item .skeleton-text[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#2a2a2a),color-stop(50%,#333),color-stop(75%,#2a2a2a));background:linear-gradient(90deg,#2a2a2a 25%,#333 50%,#2a2a2a 75%);background-size:200% 100%}.theme-dark .skeleton-cell[data-v-5cbe52d9]{background:#1c1c1c!important}.theme-dark .heatmap-empty[data-v-5cbe52d9],.theme-dark .indices-empty[data-v-5cbe52d9],.theme-dark .indices-loading[data-v-5cbe52d9]{color:#666}.qd-dark-modal .ant-modal-content{background:#141414}.qd-dark-modal .ant-modal-header{background:#141414;border-bottom-color:#2a2a2a}.qd-dark-modal .ant-modal-header .ant-modal-title{color:#d4d4d4}.qd-dark-modal .ant-modal-close-x{color:#888}.qd-dark-modal .ant-modal-body{background:#141414;color:#d4d4d4}.qd-dark-modal .ant-modal-footer{background:#141414;border-top-color:#2a2a2a}.qd-dark-modal .ant-modal-footer .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-modal-footer .ant-btn-default:hover{border-color:#1890ff;color:#1890ff}.qd-dark-modal .ant-form-item-label>label{color:#d4d4d4}.qd-dark-modal .ant-input{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-input::-webkit-input-placeholder{color:#555}.qd-dark-modal .ant-input::-moz-placeholder{color:#555}.qd-dark-modal .ant-input:-ms-input-placeholder{color:#555}.qd-dark-modal .ant-input::-ms-input-placeholder{color:#555}.qd-dark-modal .ant-input::placeholder{color:#555}.qd-dark-modal .ant-input-number,.qd-dark-modal .ant-select-selection{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-select-arrow{color:#666}.qd-dark-modal .ant-checkbox-wrapper,.qd-dark-modal .ant-radio-wrapper{color:#d4d4d4}.qd-dark-modal .ant-tabs-bar{border-bottom-color:#2a2a2a}.qd-dark-modal .ant-tabs-tab{color:#888}.qd-dark-modal .ant-tabs-tab:hover{color:#d4d4d4}.qd-dark-modal .ant-tabs-tab-active{color:#1890ff!important}.qd-dark-modal .ant-tag{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-tag-blue{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.3);color:#1890ff}.qd-dark-modal .ant-alert{background:rgba(24,144,255,.06);border-color:#2a2a2a}.qd-dark-modal .ant-alert-message{color:#d4d4d4}.qd-dark-modal .ant-alert-info .ant-alert-icon{color:#1890ff}.qd-dark-modal .ant-list-item{border-bottom-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-list-item-meta-title{color:#d4d4d4}.qd-dark-modal .ant-list-item-meta-description{color:#888}.qd-dark-modal .ant-empty-description{color:#666}.qd-dark-modal .add-stock-modal-content,.qd-dark-modal p{color:#d4d4d4}.qd-dark-modal .add-stock-modal-content .section-title{color:#d4d4d4!important}.qd-dark-modal .add-stock-modal-content .symbol-list{border-color:#2a2a2a;background:#1c1c1c}.qd-dark-modal .add-stock-modal-content .symbol-list .symbol-list-item:hover{background:#252525!important}.qd-dark-modal .add-stock-modal-content .symbol-list .symbol-list-item .symbol-code{color:#d4d4d4!important}.qd-dark-modal .add-stock-modal-content .symbol-list .symbol-list-item .symbol-name{color:#888!important}.qd-dark-modal .add-stock-modal-content .selected-symbol-info strong{color:#d4d4d4}.qd-dark-modal .add-stock-modal-content .selected-symbol-info span{color:#888!important}.qd-dark-modal .batch-modal-summary p{color:#d4d4d4}.qd-dark-modal .batch-symbols-preview .ant-tag{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.3);color:#1890ff}.qd-dark-modal .task-item{background:#1c1c1c;border-color:#2a2a2a}.qd-dark-modal .task-item:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3)}.qd-dark-modal .task-item-name{color:#d4d4d4}.qd-dark-modal .task-item-meta{color:#888}.qd-dark-modal .task-drawer-empty{color:#666}.qd-dark-modal .history-item{background:#1c1c1c;border-color:#2a2a2a}.qd-dark-modal .search-result-item{color:#d4d4d4}.qd-dark-modal .search-result-item:hover{background:#1c1c1c}.qd-dark-modal .search-result-name{color:#d4d4d4}.qd-dark-modal .search-result-market{color:#888}.qd-dark-drawer .ant-drawer-content{background:#141414}.qd-dark-drawer .ant-drawer-header{background:#141414;border-bottom-color:#2a2a2a}.qd-dark-drawer .ant-drawer-header .ant-drawer-title{color:#d4d4d4}.qd-dark-drawer .ant-drawer-header .ant-drawer-close{color:#888}.qd-dark-drawer .ant-drawer-body{background:#141414;color:#d4d4d4}.qd-dark-drawer .task-item{background:#1c1c1c;border-color:#2a2a2a}.qd-dark-drawer .task-item:hover{-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3)}.qd-dark-drawer .task-item-name{color:#d4d4d4}.qd-dark-drawer .task-item-meta{color:#888}.qd-dark-drawer .task-drawer-empty{color:#666}.qd-dark-drawer .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-drawer .ant-btn-default:hover{border-color:#1890ff;color:#1890ff}.qd-dark-drawer .ant-btn-danger{background:transparent}.qd-dark-drawer .ant-popover-inner{background:#1c1c1c}.qd-dark-drawer .ant-popover-message,.qd-dark-drawer .ant-popover-message-title{color:#d4d4d4}.qd-dark-drawer .ant-popover-buttons .ant-btn-default{background:#1c1c1c;border-color:#2a2a2a;color:#d4d4d4}.qd-dark-modal .ant-select-dropdown,body.colorWeak .ant-select-dropdown{background:#1c1c1c}.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item{color:#d4d4d4}.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item-active,.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item:hover,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item-active,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item:hover{background:#252525}.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item-selected,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item-selected{background:rgba(24,144,255,.1);color:#1890ff} \ No newline at end of file diff --git a/frontend/dist/css/811.fea2e0fa.css b/frontend/dist/css/811.fea2e0fa.css deleted file mode 100644 index 50b6956..0000000 --- a/frontend/dist/css/811.fea2e0fa.css +++ /dev/null @@ -1 +0,0 @@ -.user-manage-page[data-v-49c4f239]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.user-manage-page .page-header[data-v-49c4f239]{margin-bottom:24px}.user-manage-page .page-header .page-title[data-v-49c4f239]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.user-manage-page .page-header .page-title .anticon[data-v-49c4f239]{font-size:28px;color:#1890ff}.user-manage-page .page-header .page-desc[data-v-49c4f239]{color:#64748b;font-size:14px;margin:0}.user-manage-page .manage-tabs[data-v-49c4f239] .ant-tabs-bar{margin-bottom:20px}.user-manage-page .summary-cards[data-v-49c4f239]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.user-manage-page .summary-cards .summary-card[data-v-49c4f239]{background:#fff;border-radius:12px;padding:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.06);box-shadow:0 2px 12px rgba(0,0,0,.06);-webkit-transition:-webkit-transform .2s,-webkit-box-shadow .2s;transition:-webkit-transform .2s,-webkit-box-shadow .2s;transition:transform .2s,box-shadow .2s;transition:transform .2s,box-shadow .2s,-webkit-transform .2s,-webkit-box-shadow .2s}.user-manage-page .summary-cards .summary-card[data-v-49c4f239]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 20px rgba(0,0,0,.1);box-shadow:0 4px 20px rgba(0,0,0,.1)}.user-manage-page .summary-cards .summary-card .summary-icon[data-v-49c4f239]{width:48px;height:48px;border-radius:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-negative:0;flex-shrink:0}.user-manage-page .summary-cards .summary-card .summary-icon .anticon[data-v-49c4f239]{font-size:22px;color:#fff}.user-manage-page .summary-cards .summary-card .summary-info[data-v-49c4f239]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.user-manage-page .summary-cards .summary-card .summary-info .summary-value[data-v-49c4f239]{font-size:22px;font-weight:700;color:#1e293b;line-height:1.3}.user-manage-page .summary-cards .summary-card .summary-info .summary-value .roi-badge[data-v-49c4f239]{font-size:13px;font-weight:600;margin-left:6px;padding:1px 6px;border-radius:4px;background:rgba(0,0,0,.04)}.user-manage-page .summary-cards .summary-card .summary-info .summary-sub[data-v-49c4f239]{font-size:12px;color:#64748b;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-manage-page .summary-cards .summary-card .summary-info .summary-label[data-v-49c4f239]{font-size:13px;color:#94a3b8;margin-top:2px}.user-manage-page .toolbar[data-v-49c4f239]{margin-bottom:16px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.user-manage-page .toolbar .toolbar-left[data-v-49c4f239],.user-manage-page .toolbar .toolbar-right[data-v-49c4f239]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.user-manage-page .user-table-card[data-v-49c4f239]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.user-manage-page .user-table-card .text-muted[data-v-49c4f239]{color:#94a3b8}.user-manage-page .text-profit[data-v-49c4f239]{color:#52c41a;font-weight:600}.user-manage-page .text-loss[data-v-49c4f239]{color:#ff4d4f;font-weight:600}.user-manage-page .pnl-value[data-v-49c4f239]{font-size:14px}.user-manage-page .roi-text[data-v-49c4f239]{font-size:12px;margin-left:4px}.user-manage-page .pnl-detail[data-v-49c4f239]{font-size:11px;margin-top:2px}.user-manage-page .symbol-text[data-v-49c4f239]{font-weight:500}.user-manage-page .symbol-count[data-v-49c4f239]{font-size:11px;margin-top:2px}.user-manage-page .status-cell[data-v-49c4f239]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;white-space:nowrap}.user-manage-page .status-cell .status-dot[data-v-49c4f239]{display:inline-block;width:7px;height:7px;border-radius:50%;-ms-flex-negative:0;flex-shrink:0}.user-manage-page .status-cell .status-dot.dot-running[data-v-49c4f239]{background:#52c41a;-webkit-box-shadow:0 0 6px rgba(82,196,26,.5);box-shadow:0 0 6px rgba(82,196,26,.5);-webkit-animation:pulse-green-49c4f239 2s infinite;animation:pulse-green-49c4f239 2s infinite}.user-manage-page .status-cell .status-dot.dot-stopped[data-v-49c4f239]{background:#d9d9d9}.user-manage-page .status-cell .status-running[data-v-49c4f239]{color:#52c41a;font-weight:500;font-size:13px}.user-manage-page .status-cell .status-stopped[data-v-49c4f239]{color:#999;font-size:13px}@-webkit-keyframes pulse-green-49c4f239{0%,to{opacity:1}50%{opacity:.5}}@keyframes pulse-green-49c4f239{0%,to{opacity:1}50%{opacity:.5}}.user-manage-page .user-cell[data-v-49c4f239]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;overflow:hidden;white-space:nowrap;cursor:default}.user-manage-page .user-cell .user-name[data-v-49c4f239]{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:80px}.user-manage-page .indicator-name[data-v-49c4f239]{color:#722ed1;font-size:12px}.user-manage-page .exchange-name[data-v-49c4f239]{font-size:12px;text-transform:capitalize}.user-manage-page .address-text[data-v-49c4f239],.user-manage-page .hash-text[data-v-49c4f239]{font-family:Roboto Mono,Courier New,monospace;font-size:12px;color:#1890ff;cursor:pointer}.user-manage-page .address-text[data-v-49c4f239]:hover,.user-manage-page .hash-text[data-v-49c4f239]:hover{text-decoration:underline}.user-manage-page[data-v-49c4f239] .ant-tag.ant-tag-grey{background-color:#f5f5f5;border-color:#d9d9d9;color:#595959}.user-manage-page.theme-dark[data-v-49c4f239]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.user-manage-page.theme-dark .page-header .page-title[data-v-49c4f239]{color:#e0e6ed}.user-manage-page.theme-dark .page-header .page-desc[data-v-49c4f239]{color:#8b949e}.user-manage-page.theme-dark .manage-tabs[data-v-49c4f239] .ant-tabs-bar{border-bottom-color:#30363d}.user-manage-page.theme-dark .manage-tabs[data-v-49c4f239] .ant-tabs-tab{color:#8b949e}.user-manage-page.theme-dark .manage-tabs[data-v-49c4f239] .ant-tabs-tab:hover{color:#c9d1d9}.user-manage-page.theme-dark .manage-tabs[data-v-49c4f239] .ant-tabs-tab-active{color:#1890ff}.user-manage-page.theme-dark .summary-cards .summary-card[data-v-49c4f239]{background:#1e222d;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.3);box-shadow:0 2px 12px rgba(0,0,0,.3)}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-value[data-v-49c4f239]{color:#e0e6ed}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-value .roi-badge[data-v-49c4f239]{background:hsla(0,0%,100%,.08)}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-sub[data-v-49c4f239]{color:#8b949e}.user-manage-page.theme-dark .summary-cards .summary-card .summary-info .summary-label[data-v-49c4f239]{color:#6e7681}.user-manage-page.theme-dark .user-table-card[data-v-49c4f239]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.user-manage-page.theme-dark .user-table-card[data-v-49c4f239] .ant-card-body{background:#1e222d}.user-manage-page.theme-dark .user-table-card[data-v-49c4f239] .ant-table{background:#1e222d;color:#c9d1d9}.user-manage-page.theme-dark .user-table-card[data-v-49c4f239] .ant-table .ant-table-thead>tr>th{background:#252a36;color:#e0e6ed;border-bottom-color:#30363d}.user-manage-page.theme-dark .user-table-card[data-v-49c4f239] .ant-table .ant-table-tbody>tr>td{border-bottom-color:#30363d}.user-manage-page.theme-dark .user-table-card[data-v-49c4f239] .ant-table .ant-table-tbody>tr:hover>td{background:#252a36}.user-manage-page.theme-dark .user-table-card .text-muted[data-v-49c4f239]{color:#6e7681}.user-manage-page.theme-dark .user-table-card h4[data-v-49c4f239]{color:#e0e6ed!important}.user-manage-page .credits-value[data-v-49c4f239]{font-weight:600;color:#722ed1}.user-manage-page .current-credits-info[data-v-49c4f239],.user-manage-page .current-vip-info[data-v-49c4f239]{margin-bottom:16px;padding:12px 16px;background:#f5f5f5;border-radius:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.user-manage-page .current-credits-info .label[data-v-49c4f239],.user-manage-page .current-vip-info .label[data-v-49c4f239]{color:#666}.user-manage-page .current-credits-info .value[data-v-49c4f239],.user-manage-page .current-vip-info .value[data-v-49c4f239]{font-weight:600;color:#1890ff;font-size:18px}.user-manage-page .current-credits-info .value.active[data-v-49c4f239],.user-manage-page .current-vip-info .value.active[data-v-49c4f239]{color:#52c41a}.user-manage-page .current-credits-info .value.expired[data-v-49c4f239],.user-manage-page .current-vip-info .value.expired[data-v-49c4f239]{color:#999}@media (max-width:1200px){.summary-cards[data-v-49c4f239]{grid-template-columns:repeat(2,1fr)!important}}@media (max-width:768px){.summary-cards[data-v-49c4f239]{grid-template-columns:1fr!important}} \ No newline at end of file diff --git a/frontend/dist/css/829.e48d5d81.css b/frontend/dist/css/829.e48d5d81.css deleted file mode 100644 index fdd2b37..0000000 --- a/frontend/dist/css/829.e48d5d81.css +++ /dev/null @@ -1 +0,0 @@ -.profile-page[data-v-86a53e9c]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:24px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:28px;color:#1890ff}.profile-page .page-header .page-desc[data-v-86a53e9c]{color:#64748b;font-size:14px;margin:0}.profile-page .profile-cards-row[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c] .ant-card-body,.profile-page .profile-cards-row .right-cards-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row[data-v-86a53e9c]{height:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c],.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-row .ant-col .ant-card[data-v-86a53e9c]{height:100%}.profile-page .profile-cards-row .right-cards-row .ant-col[data-v-86a53e9c] .ant-card-body{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);text-align:center}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:20px 0}.profile-page .profile-card .avatar-section .ant-avatar[data-v-86a53e9c]{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15);box-shadow:0 4px 12px rgba(0,0,0,.15)}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{margin:16px 0 8px;font-size:20px;font-weight:600;color:#1e3a5f}.profile-page .profile-card .avatar-section .user-role[data-v-86a53e9c]{margin:0}.profile-page .profile-card .profile-info[data-v-86a53e9c]{text-align:left;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 0;border-bottom:1px solid #f0f0f0}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]:last-child{border-bottom:none}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:16px;color:#1890ff;margin-right:12px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#64748b;margin-right:8px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#1e3a5f;font-weight:500}.profile-page .edit-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:500px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{border-radius:8px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{margin-top:8px;font-size:12px;color:rgba(0,0,0,.45)}.profile-page .edit-card .password-form .email-hint.email-warning[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint.email-warning[data-v-86a53e9c]{color:#faad14}.profile-page .edit-card .amount-positive[data-v-86a53e9c]{color:#52c41a;font-weight:600}.profile-page .edit-card .amount-negative[data-v-86a53e9c]{color:#ff4d4f;font-weight:600}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{margin-top:6px;font-size:12px;color:rgba(0,0,0,.45);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.profile-page .edit-card .notification-settings-form .field-hint .anticon[data-v-86a53e9c]{font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group{width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper{margin-bottom:8px}.profile-page .credits-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.profile-page .credits-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:20px 0;text-align:center;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:42px;font-weight:700;color:#fff;text-shadow:0 2px 4px rgba(0,0,0,.2)}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:16px;color:hsla(0,0%,100%,.9);margin-left:8px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{margin-top:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;font-size:13px}.profile-page .credits-card .credits-body .vip-status .vip-active[data-v-86a53e9c]{color:gold}.profile-page .credits-card .credits-body .vip-status .vip-expired[data-v-86a53e9c]{color:hsla(0,0%,100%,.6)}.profile-page .credits-card .credits-body .vip-status .no-vip[data-v-86a53e9c]{color:hsla(0,0%,100%,.7)}.profile-page .credits-card .credits-actions[data-v-86a53e9c]{text-align:center;margin-top:auto}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{border-radius:20px;padding:0 24px;height:36px;font-weight:500;background:#fff;color:#667eea;border:none}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.9);color:#764ba2}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{margin-top:12px;text-align:center;font-size:12px;color:hsla(0,0%,100%,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:12px;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08);background:linear-gradient(135deg,#11998e,#38ef7d);color:#fff}.profile-page .referral-card[data-v-86a53e9c] .ant-card-body{background:transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.2)}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:16px;font-weight:600;margin:0;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:18px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:12px 0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.profile-page .referral-card .referral-body .referral-stats[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.profile-page .referral-card .referral-body .referral-stats .stat-item[data-v-86a53e9c]{text-align:center}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:28px;font-weight:700;color:#fff;display:block}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.8)}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c]{font-size:12px;color:hsla(0,0%,100%,.9);margin-bottom:6px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{background:hsla(0,0%,100%,.2);border:1px solid hsla(0,0%,100%,.3);color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-moz-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input::placeholder{color:hsla(0,0%,100%,.6)}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy{color:#fff}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .anticon-copy:hover{color:gold}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{margin-top:auto;text-align:center;font-size:12px;color:hsla(0,0%,100%,.85);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px}.profile-page .referral-card .referral-body .referral-hint .anticon-gift[data-v-86a53e9c]{color:gold}.profile-page .referral-user-cell[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px}.profile-page .referral-user-cell .user-info[data-v-86a53e9c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-weight:500;color:#333}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:12px;color:#999}.profile-page .exchange-config-section .credential-hint[data-v-86a53e9c]{font-family:SFMono-Regular,Consolas,monospace;font-size:13px;color:#666}.profile-page .test-result-msg[data-v-86a53e9c]{margin-top:8px;font-size:13px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.profile-page .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark[data-v-86a53e9c]{background:-webkit-gradient(linear,left top,left bottom,from(#0d1117),to(#161b22));background:linear-gradient(180deg,#0d1117,#161b22)}.profile-page.theme-dark .page-header .page-title[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .page-header .page-desc[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c],.profile-page.theme-dark .profile-card[data-v-86a53e9c]{background:#1e222d;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-card-body,.profile-page.theme-dark .profile-card[data-v-86a53e9c] .ant-card-body{background:#1e222d}.profile-page.theme-dark .profile-card .avatar-section .username[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .profile-card .profile-info .info-item[data-v-86a53e9c]{border-bottom-color:#30363d}.profile-page.theme-dark .profile-card .profile-info .info-item .label[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .profile-card .profile-info .info-item .value[data-v-86a53e9c]{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-bar{border-bottom-color:#30363d}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab{color:#8b949e}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab:hover{color:#e0e6ed}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab-active{color:#1890ff}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-form-item-label label{color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:hover{border-color:#1890ff}.profile-page.theme-dark .credits-card[data-v-86a53e9c]{background:linear-gradient(135deg,#1a1a2e,#16213e 50%,#0f3460);-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.profile-page.theme-dark .credits-card[data-v-86a53e9c] .ant-divider{border-color:hsla(0,0%,100%,.1)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{background:hsla(0,0%,100%,.15);color:#fff;border:1px solid hsla(0,0%,100%,.2)}.profile-page.theme-dark .credits-card .credits-actions .ant-btn[data-v-86a53e9c]:hover{background:hsla(0,0%,100%,.25)}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table{background:#1e222d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-thead>tr>th{background:#2a2e39;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td{background:#1e222d;color:#c9d1d9;border-bottom-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr:hover>td{background:#2a2e39}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-placeholder{background:#1e222d;color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td :not(.ant-tag):not(.ant-btn),.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td div,.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .ant-table-tbody>tr>td span{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-positive{color:#52c41a}.profile-page.theme-dark[data-v-86a53e9c] .ant-table-wrapper .amount-negative{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-label>label,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-label>label{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-form-item-extra,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-explain,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-form-item-extra{color:#8b949e}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-webkit-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-webkit-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-moz-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-moz-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input:-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector:-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::-ms-input-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::-ms-input-placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selector::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-number::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input-password::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-input::placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selector::placeholder{color:#6e7681}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-select-selection-placeholder,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-wrapper span,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-item,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-select-selection-placeholder{color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff}.profile-page.theme-dark .notification-settings-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .password-form .field-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-hint[data-v-86a53e9c],.profile-page.theme-dark .profile-form .field-hint[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark .notification-settings-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .password-form .email-warning[data-v-86a53e9c],.profile-page.theme-dark .profile-form .email-warning[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-message{color:#c9d1d9}.profile-page.theme-dark .exchange-config-section .credential-hint[data-v-86a53e9c],.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-alert .ant-alert-description{color:#8b949e}.profile-page.theme-dark .test-result-msg.success[data-v-86a53e9c]{color:#52c41a}.profile-page.theme-dark .test-result-msg.error[data-v-86a53e9c]{color:#f5222d}.profile-page.theme-dark .referral-user-cell .user-info .nickname[data-v-86a53e9c]{color:#c9d1d9}.profile-page.theme-dark .referral-user-cell .user-info .username[data-v-86a53e9c]{color:#8b949e}.profile-page.theme-dark[data-v-86a53e9c] .ant-tag{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item{background:#1e222d;border-color:#30363d}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item a{color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active a{color:#fff}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-next .ant-pagination-item-link,.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-prev .ant-pagination-item-link{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-options .ant-select-selector{background:#0d1117;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default{background:#1e222d;border-color:#30363d;color:#c9d1d9}.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff}@media screen and (max-width:768px){.profile-page[data-v-86a53e9c]{padding:12px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:16px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:20px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:22px}.profile-page .page-header .page-desc[data-v-86a53e9c]{font-size:13px}.profile-page .profile-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .profile-card-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-cards-row .right-cards-col .right-cards-row[data-v-86a53e9c]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.profile-page .profile-cards-row .right-cards-col .right-cards-row .ant-col[data-v-86a53e9c]{margin-bottom:12px}.profile-page .profile-card[data-v-86a53e9c]{border-radius:10px}.profile-page .profile-card .avatar-section[data-v-86a53e9c]{padding:16px 0}.profile-page .profile-card .avatar-section[data-v-86a53e9c] .ant-avatar{width:80px!important;height:80px!important;line-height:80px!important}.profile-page .profile-card .avatar-section .username[data-v-86a53e9c]{font-size:18px;margin:12px 0 6px}.profile-page .profile-card .profile-info .info-item[data-v-86a53e9c]{padding:10px 0;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{font-size:14px;margin-right:8px}.profile-page .profile-card .profile-info .info-item .label[data-v-86a53e9c]{font-size:13px}.profile-page .profile-card .profile-info .info-item .value[data-v-86a53e9c]{font-size:13px;word-break:break-all}.profile-page .credits-card[data-v-86a53e9c]{border-radius:10px}.profile-page .credits-card .credits-header .credits-title[data-v-86a53e9c]{font-size:15px}.profile-page .credits-card .credits-header .credits-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .credits-card .credits-body[data-v-86a53e9c]{padding:16px 0}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:32px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:14px}.profile-page .credits-card .credits-body .vip-status[data-v-86a53e9c]{font-size:12px;margin-top:10px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{height:34px;padding:0 20px;font-size:14px}.profile-page .credits-card .credits-hint[data-v-86a53e9c]{font-size:11px;margin-top:10px}.profile-page .referral-card[data-v-86a53e9c]{border-radius:10px}.profile-page .referral-card .referral-header .referral-title[data-v-86a53e9c]{font-size:15px}.profile-page .referral-card .referral-header .referral-title .anticon[data-v-86a53e9c]{font-size:16px}.profile-page .referral-card .referral-body[data-v-86a53e9c]{padding:10px 0}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:24px}.profile-page .referral-card .referral-body .referral-link-section .link-label[data-v-86a53e9c],.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-label[data-v-86a53e9c]{font-size:11px}.profile-page .referral-card .referral-body .referral-link-section .link-box[data-v-86a53e9c] .ant-input{font-size:12px}.profile-page .referral-card .referral-body .referral-hint[data-v-86a53e9c]{font-size:11px;padding-top:8px}.profile-page .edit-card[data-v-86a53e9c]{border-radius:10px;margin-top:12px!important}.profile-page .edit-card[data-v-86a53e9c] .ant-card-body{padding:12px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:10px 12px;font-size:13px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav-scroll::-webkit-scrollbar{display:none}.profile-page .edit-card .password-form[data-v-86a53e9c],.profile-page .edit-card .profile-form[data-v-86a53e9c]{max-width:100%}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label{padding-bottom:4px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-form-item-label label,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-form-item-label label{font-size:13px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-input-password,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input,.profile-page .edit-card .profile-form[data-v-86a53e9c] .ant-input-password{font-size:14px}.profile-page .edit-card .password-form .email-hint[data-v-86a53e9c],.profile-page .edit-card .profile-form .email-hint[data-v-86a53e9c]{font-size:11px}.profile-page .edit-card .password-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-alert{font-size:12px;padding:8px 12px;margin-bottom:16px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form{max-width:100%}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row{margin-left:0!important;margin-right:0!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{padding-left:0!important;padding-right:8px!important}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-checkbox-wrapper{font-size:13px;margin-bottom:6px}.profile-page .edit-card .notification-settings-form .field-hint[data-v-86a53e9c]{font-size:11px;-ms-flex-wrap:wrap;flex-wrap:wrap}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item{margin-bottom:16px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn{width:100%;margin-bottom:8px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-form-item:last-child .ant-btn+.ant-btn{margin-left:0!important}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper{overflow-x:auto}.profile-page .edit-card[data-v-86a53e9c] .ant-table-wrapper .ant-table{min-width:500px}.profile-page .referral-user-cell[data-v-86a53e9c]{gap:8px}.profile-page .referral-user-cell[data-v-86a53e9c] .ant-avatar{width:28px!important;height:28px!important;line-height:28px!important}.profile-page .referral-user-cell .user-info .nickname[data-v-86a53e9c]{font-size:13px}.profile-page .referral-user-cell .user-info .username[data-v-86a53e9c]{font-size:11px}}@media screen and (max-width:480px){.profile-page[data-v-86a53e9c]{padding:8px}.profile-page .page-header[data-v-86a53e9c]{margin-bottom:12px}.profile-page .page-header .page-title[data-v-86a53e9c]{font-size:18px;gap:8px}.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{font-size:20px}.profile-page .credits-card .credits-body .credits-amount .amount-value[data-v-86a53e9c]{font-size:28px}.profile-page .credits-card .credits-body .credits-amount .amount-label[data-v-86a53e9c]{font-size:13px}.profile-page .credits-card .credits-actions .ant-btn[data-v-86a53e9c]{width:100%}.profile-page .referral-card .referral-body .referral-stats .stat-item .stat-value[data-v-86a53e9c]{font-size:20px}.profile-page .edit-card[data-v-86a53e9c] .ant-tabs-nav .ant-tabs-tab{padding:8px 10px;font-size:12px}.profile-page .edit-card .notification-settings-form[data-v-86a53e9c] .ant-checkbox-group .ant-row .ant-col{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}} \ No newline at end of file diff --git a/frontend/dist/css/875.752239ab.css b/frontend/dist/css/875.752239ab.css new file mode 100644 index 0000000..ffcfbe4 --- /dev/null +++ b/frontend/dist/css/875.752239ab.css @@ -0,0 +1 @@ +.settings-page[data-v-f144964c]{padding:24px;min-height:calc(100vh - 120px);background:-webkit-gradient(linear,left top,left bottom,from(#f8fafc),to(#f1f5f9));background:linear-gradient(180deg,#f8fafc,#f1f5f9)}.settings-page .restart-alert[data-v-f144964c]{margin-bottom:16px;border-radius:8px}.settings-page .settings-header[data-v-f144964c]{margin-bottom:24px}.settings-page .settings-header .page-title[data-v-f144964c]{font-size:24px;font-weight:700;margin:0 0 8px 0;color:#1e3a5f;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.settings-page .settings-header .page-title .anticon[data-v-f144964c]{font-size:28px;color:#1890ff}.settings-page .settings-header .page-desc[data-v-f144964c]{color:#64748b;font-size:14px;margin:0}.settings-page .settings-content[data-v-f144964c]{margin-bottom:80px}.settings-page .openrouter-balance-card[data-v-f144964c]{margin-bottom:20px}.settings-page .openrouter-balance-card .ant-card[data-v-f144964c]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border:1px solid #91d5ff;border-radius:8px}.settings-page .openrouter-balance-card .balance-header[data-v-f144964c]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:12px}.settings-page .openrouter-balance-card .balance-header .balance-title[data-v-f144964c]{font-size:15px;font-weight:600;color:#1890ff}.settings-page .openrouter-balance-card .balance-info[data-v-f144964c]{padding:8px 0}.settings-page .openrouter-balance-card .balance-info[data-v-f144964c] .ant-statistic-title{font-size:12px;color:#666}.settings-page .openrouter-balance-card .balance-info[data-v-f144964c] .ant-statistic-content{font-size:18px}.settings-page .openrouter-balance-card .balance-info .free-tier-badge[data-v-f144964c]{margin-top:12px;text-align:right}.settings-page .openrouter-balance-card .balance-empty[data-v-f144964c]{color:#8c8c8c;font-size:13px;padding:8px 0}.settings-page .settings-collapse[data-v-f144964c]{background:transparent}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item{margin-bottom:16px;border:none;border-radius:12px;overflow:hidden;background:#fff;-webkit-box-shadow:0 4px 20px rgba(0,0,0,.08);box-shadow:0 4px 20px rgba(0,0,0,.08)}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header{font-size:16px;font-weight:600;color:#1e3a5f;padding:16px 24px;padding-left:48px;background:linear-gradient(135deg,#fff,#f8fafc);border-bottom:1px solid #f0f0f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .ant-collapse-arrow{color:#1890ff;left:20px}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{font-size:18px;color:#1890ff}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{font-size:16px}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content{border-top:none}.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{padding:24px}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label{padding-bottom:4px}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label label{color:#475569;font-weight:500}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-ms-flex-wrap:wrap;flex-wrap:wrap}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .label-text{color:#475569;font-weight:500}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon{font-size:14px;color:#94a3b8;cursor:help;-webkit-transition:color .2s;transition:color .2s}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#1890ff}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link{font-size:12px;font-weight:400;color:#1890ff;text-decoration:none;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:2px 8px;background:rgba(24,144,255,.08);border-radius:4px;-webkit-transition:all .2s;transition:all .2s;margin-left:4px}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.15);color:#0076e4}.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link .anticon{font-size:11px}.settings-page .settings-form[data-v-f144964c] .ant-input,.settings-page .settings-form[data-v-f144964c] .ant-input-number,.settings-page .settings-form[data-v-f144964c] .ant-select-selection{border-radius:8px}.settings-page .settings-form[data-v-f144964c] .ant-input-number{width:100%}.settings-page .settings-form .password-field .field-hint[data-v-f144964c]{margin-top:4px;font-size:12px;color:#52c41a;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px}.settings-page .settings-form .field-default[data-v-f144964c]{margin-top:4px;font-size:12px;color:#94a3b8}.settings-page .settings-footer[data-v-f144964c]{position:fixed;bottom:0;left:208px;right:0;padding:16px 24px;background:#fff;-webkit-box-shadow:0 -4px 20px rgba(0,0,0,.08);box-shadow:0 -4px 20px rgba(0,0,0,.08);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px;z-index:100}.settings-page .settings-footer .ant-btn[data-v-f144964c]{min-width:100px;height:40px;border-radius:8px;font-weight:500}.settings-page.theme-dark[data-v-f144964c]{background:-webkit-gradient(linear,left top,left bottom,from(#141414),to(#1c1c1c));background:linear-gradient(180deg,#141414,#1c1c1c)}.settings-page.theme-dark .restart-alert[data-v-f144964c]{background:#1c1c1c;border-color:#b08800}.settings-page.theme-dark .settings-header .page-title[data-v-f144964c]{color:#e0e6ed}.settings-page.theme-dark .settings-header .page-desc[data-v-f144964c]{color:#8b949e}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item{background:#1c1c1c;-webkit-box-shadow:0 4px 24px rgba(0,0,0,.25);box-shadow:0 4px 24px rgba(0,0,0,.25)}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header{background:linear-gradient(135deg,#252525,#1c1c1c);color:#e0e6ed;border-bottom-color:hsla(0,0%,100%,.06)}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{color:#58a6ff}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-title{color:#e0e6ed}.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content,.settings-page.theme-dark .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-content .ant-collapse-content-box{background:#1c1c1c}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .label-text,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label label{color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon{color:#6e7681}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link{background:rgba(24,144,255,.15);color:#58a6ff}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.25)}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection{background:#141414;border-color:#2a2a2a;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection:hover{border-color:#1890ff}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number-input{background:transparent;color:#c9d1d9}.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-arrow{color:#8b949e}.settings-page.theme-dark .settings-form .field-default[data-v-f144964c]{color:#6e7681}.settings-page.theme-dark .settings-footer[data-v-f144964c]{background:#1c1c1c;border-top:1px solid hsla(0,0%,100%,.06);-webkit-box-shadow:0 -4px 24px rgba(0,0,0,.25);box-shadow:0 -4px 24px rgba(0,0,0,.25)}@media (max-width:768px){.settings-page[data-v-f144964c]{padding:16px}.settings-page .settings-footer[data-v-f144964c]{left:0;padding:12px 16px}} \ No newline at end of file diff --git a/frontend/dist/css/896.37fb7134.css b/frontend/dist/css/896.37fb7134.css deleted file mode 100644 index 91cfae0..0000000 --- a/frontend/dist/css/896.37fb7134.css +++ /dev/null @@ -1 +0,0 @@ -.fast-analysis-report[data-v-693144f6]{height:100%;overflow-y:auto;padding:20px;background:linear-gradient(135deg,#f5f7fa,#e4e8ec);border-radius:12px}.fast-analysis-report .loading-container[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px;background:#fff;border-radius:12px}.fast-analysis-report .loading-container .loading-content-pro[data-v-693144f6]{width:100%;max-width:400px;padding:40px}.fast-analysis-report .loading-container .loading-content-pro .loading-header[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:12px;margin-bottom:32px}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-icon-pro[data-v-693144f6]{font-size:28px;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-title[data-v-693144f6]{font-size:20px;font-weight:600;color:#1e293b}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper[data-v-693144f6]{margin-bottom:24px;position:relative}.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper .progress-text[data-v-693144f6]{position:absolute;right:0;top:-24px;font-size:14px;font-weight:600;color:#1890ff}.fast-analysis-report .loading-container .loading-content-pro .current-step[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px;padding:12px 20px;background:#f0f5ff;border-radius:8px;margin-bottom:24px;color:#1890ff;font-size:14px;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .current-step .anticon[data-v-693144f6]{font-size:16px}.fast-analysis-report .loading-container .loading-content-pro .steps-list[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:12px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:10px 16px;background:#f8fafc;border-radius:8px;font-size:13px;color:#94a3b8;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-dot[data-v-693144f6]{width:8px;height:8px;border-radius:50%;background:#e2e8f0;-webkit-transition:all .3s;transition:all .3s}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-text[data-v-693144f6]{-webkit-box-flex:1;-ms-flex:1;flex:1}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item .step-check[data-v-693144f6]{color:#52c41a;font-size:14px}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active[data-v-693144f6]{background:#e6f7ff;color:#1890ff;font-weight:500}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active .step-dot[data-v-693144f6]{background:#1890ff;-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.2);box-shadow:0 0 0 3px rgba(24,144,255,.2)}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done[data-v-693144f6]{background:#f6ffed;color:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.done .step-dot[data-v-693144f6]{background:#52c41a}.fast-analysis-report .loading-container .loading-content-pro .loading-footer[data-v-693144f6]{margin-top:24px;text-align:center}.fast-analysis-report .loading-container .loading-content-pro .loading-footer .elapsed-time[data-v-693144f6]{font-size:13px;color:#94a3b8;font-family:SF Mono,Monaco,monospace}.fast-analysis-report .empty-container[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:400px}.fast-analysis-report .empty-container .empty-content[data-v-693144f6]{text-align:center}.fast-analysis-report .empty-container .empty-content .empty-icon[data-v-693144f6]{font-size:64px;color:#d9d9d9}.fast-analysis-report .empty-container .empty-content .empty-title[data-v-693144f6]{margin-top:16px;font-size:18px;font-weight:600;color:#262626}.fast-analysis-report .empty-container .empty-content .empty-hint[data-v-693144f6]{margin-top:8px;color:#8c8c8c}.fast-analysis-report .result-container .decision-card[data-v-693144f6]{background:#fff;border-radius:16px;padding:24px;margin-bottom:20px;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.08);box-shadow:0 4px 12px rgba(0,0,0,.08);border-left:6px solid #1890ff}.fast-analysis-report .result-container .decision-card.decision-buy[data-v-693144f6]{border-left-color:#52c41a;background:linear-gradient(135deg,#f6ffed,#fff)}.fast-analysis-report .result-container .decision-card.decision-sell[data-v-693144f6]{border-left-color:#ff4d4f;background:linear-gradient(135deg,#fff2f0,#fff)}.fast-analysis-report .result-container .decision-card.decision-hold[data-v-693144f6]{border-left-color:#faad14;background:linear-gradient(135deg,#fffbe6,#fff)}.fast-analysis-report .result-container .decision-card .decision-main[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:16px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .anticon[data-v-693144f6]{font-size:32px}.fast-analysis-report .result-container .decision-card .decision-main .decision-badge .decision-text[data-v-693144f6]{font-size:36px;font-weight:800;letter-spacing:2px}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring[data-v-693144f6]{text-align:center}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-value[data-v-693144f6]{font-size:18px;font-weight:700}.fast-analysis-report .result-container .decision-card .decision-main .confidence-ring .confidence-label[data-v-693144f6]{font-size:12px;color:#8c8c8c;margin-top:4px}.fast-analysis-report .result-container .decision-card .decision-summary[data-v-693144f6]{font-size:16px;line-height:1.6;color:#595959;padding-top:16px;border-top:1px dashed #e8e8e8}.fast-analysis-report .result-container .decision-card .consensus-strip[data-v-693144f6]{margin-top:14px;padding:12px 14px;border-radius:8px;background:rgba(24,144,255,.06);border:1px solid rgba(24,144,255,.2);font-size:13px;color:#434343}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-title[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-weight:600;margin-bottom:8px;color:#1890ff}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:12px 20px}.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-693144f6]{font-style:normal;color:#8c8c8c;margin-right:6px}.fast-analysis-report .result-container .price-info-row[data-v-693144f6]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .price-info-row .price-card[data-v-693144f6]{background:#fff;border-radius:12px;padding:16px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .price-info-row .price-card .price-label[data-v-693144f6]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .price-info-row .price-card .price-value[data-v-693144f6]{font-size:18px;font-weight:700;color:#262626}.fast-analysis-report .result-container .price-info-row .price-card .price-value.positive[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-value.negative[data-v-693144f6]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card .price-hint[data-v-693144f6]{font-size:10px;color:#bfbfbf;margin-top:6px;cursor:help}.fast-analysis-report .result-container .price-info-row .price-card .price-hint .anticon[data-v-693144f6]{margin-right:2px}.fast-analysis-report .result-container .price-info-row .price-card .price-change[data-v-693144f6]{font-size:14px;margin-top:4px;font-weight:600}.fast-analysis-report .result-container .price-info-row .price-card .price-change.positive[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .price-info-row .price-card .price-change.negative[data-v-693144f6]{color:#ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.current[data-v-693144f6]{border-top:3px solid #1890ff}.fast-analysis-report .result-container .price-info-row .price-card.entry[data-v-693144f6]{border-top:3px solid #722ed1}.fast-analysis-report .result-container .price-info-row .price-card.stop[data-v-693144f6]{border-top:3px solid #ff4d4f}.fast-analysis-report .result-container .price-info-row .price-card.target[data-v-693144f6]{border-top:3px solid #52c41a}.fast-analysis-report .result-container .scores-row[data-v-693144f6]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .scores-row .score-item[data-v-693144f6]{background:#fff;border-radius:12px;padding:16px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .scores-row .score-item .score-header[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .scores-row .score-item .score-header .anticon[data-v-693144f6]{color:#1890ff}.fast-analysis-report .result-container .scores-row .score-item .score-value[data-v-693144f6]{text-align:right;font-size:20px;font-weight:700;color:#262626;margin-top:8px}.fast-analysis-report .result-container .scores-row .score-item.overall[data-v-693144f6]{background:linear-gradient(135deg,#e6f7ff,#fff);border:1px solid #91d5ff}.fast-analysis-report .result-container .detailed-analysis[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:16px;margin-bottom:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card[data-v-693144f6]{background:linear-gradient(135deg,#fff,#fafafa);border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 12px rgba(0,0,0,.06);box-shadow:0 2px 12px rgba(0,0,0,.06);border-left:4px solid #1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.technical[data-v-693144f6]{border-left-color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card.fundamental[data-v-693144f6]{border-left-color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card.sentiment[data-v-693144f6]{border-left-color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:10px;margin-bottom:14px;font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header .anticon[data-v-693144f6]{font-size:20px}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.technical .anticon[data-v-693144f6]{color:#1890ff}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.fundamental .anticon[data-v-693144f6]{color:#722ed1}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.sentiment .anticon[data-v-693144f6]{color:#eb2f96}.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-content[data-v-693144f6]{font-size:14px;line-height:1.8;color:#595959;text-align:justify}.fast-analysis-report .result-container .analysis-details[data-v-693144f6]{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-bottom:20px}.fast-analysis-report .result-container .analysis-details .detail-section[data-v-693144f6]{background:#fff;border-radius:12px;padding:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .analysis-details .detail-section .section-title[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:16px;font-weight:600;margin-bottom:16px;color:#262626}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list[data-v-693144f6]{list-style:none;padding:0;margin:0}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]{padding:10px 0;border-bottom:1px solid #f0f0f0;font-size:14px;line-height:1.6;color:#595959}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]:last-child{border-bottom:none}.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]:before{content:"•";margin-right:8px;color:#1890ff}.fast-analysis-report .result-container .analysis-details .detail-section.reasons[data-v-693144f6]{border-left:4px solid #52c41a}.fast-analysis-report .result-container .analysis-details .detail-section.risks[data-v-693144f6]{border-left:4px solid #faad14}.fast-analysis-report .result-container .indicators-section[data-v-693144f6]{background:#fff;border-radius:12px;padding:20px;margin-bottom:20px;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .indicators-section .section-title[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;font-size:16px;font-weight:600;margin-bottom:16px;color:#262626}.fast-analysis-report .result-container .indicators-section .section-title .anticon[data-v-693144f6]{color:#1890ff}.fast-analysis-report .result-container .indicators-section .indicators-grid[data-v-693144f6]{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item[data-v-693144f6]{background:#fafafa;border-radius:8px;padding:12px;text-align:center}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-name[data-v-693144f6]{font-size:12px;color:#8c8c8c;margin-bottom:8px}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value[data-v-693144f6]{font-size:16px;font-weight:600;color:#262626}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bullish[data-v-693144f6],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.oversold[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.bearish[data-v-693144f6],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.high-volatility[data-v-693144f6],.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.overbought[data-v-693144f6]{color:#ff4d4f}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-value.low-volatility[data-v-693144f6]{color:#52c41a}.fast-analysis-report .result-container .indicators-section .indicators-grid .indicator-item .indicator-signal[data-v-693144f6]{font-size:11px;color:#8c8c8c;margin-top:4px;text-transform:capitalize}.fast-analysis-report .result-container .feedback-section[data-v-693144f6]{background:#fff;border-radius:12px;padding:20px;text-align:center;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.06);box-shadow:0 2px 8px rgba(0,0,0,.06)}.fast-analysis-report .result-container .feedback-section .feedback-question[data-v-693144f6]{font-size:14px;color:#595959;margin-bottom:12px}.fast-analysis-report .result-container .feedback-section .feedback-buttons[data-v-693144f6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px;margin-bottom:16px}.fast-analysis-report .result-container .feedback-section .feedback-buttons .ant-btn[data-v-693144f6]{min-width:100px}.fast-analysis-report .result-container .feedback-section .analysis-meta[data-v-693144f6]{font-size:12px;color:#8c8c8c;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:16px}@media (max-width:992px){.fast-analysis-report .price-info-row[data-v-693144f6],.fast-analysis-report .scores-row[data-v-693144f6]{grid-template-columns:repeat(2,1fr)}.fast-analysis-report .analysis-details[data-v-693144f6]{grid-template-columns:1fr}}@media (max-width:576px){.fast-analysis-report[data-v-693144f6]{padding:12px}.fast-analysis-report .price-info-row[data-v-693144f6],.fast-analysis-report .scores-row[data-v-693144f6]{grid-template-columns:1fr}.fast-analysis-report .decision-card[data-v-693144f6]{padding:16px}.fast-analysis-report .decision-card .decision-main[data-v-693144f6]{gap:16px;text-align:center}.fast-analysis-report .decision-card .decision-main .decision-badge[data-v-693144f6],.fast-analysis-report .decision-card .decision-main[data-v-693144f6]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.fast-analysis-report .decision-card .decision-main .decision-badge .decision-text[data-v-693144f6]{font-size:28px}}.fast-analysis-report.theme-dark[data-v-693144f6]{background:linear-gradient(135deg,#1e222d,#131722)}.fast-analysis-report.theme-dark .loading-content .loading-text[data-v-693144f6]{color:#00e5ff}.fast-analysis-report.theme-dark .empty-content .empty-title[data-v-693144f6]{color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card[data-v-693144f6]{background:#2a2e39;border-left-color:#1890ff}.fast-analysis-report.theme-dark .decision-card.decision-buy[data-v-693144f6]{background:linear-gradient(135deg,rgba(82,196,26,.1),#2a2e39)}.fast-analysis-report.theme-dark .decision-card.decision-sell[data-v-693144f6]{background:linear-gradient(135deg,rgba(255,77,79,.1),#2a2e39)}.fast-analysis-report.theme-dark .decision-card.decision-hold[data-v-693144f6]{background:linear-gradient(135deg,rgba(250,173,20,.1),#2a2e39)}.fast-analysis-report.theme-dark .decision-card .decision-summary[data-v-693144f6]{color:#868993;border-top-color:#363c4e}.fast-analysis-report.theme-dark .decision-card .consensus-strip[data-v-693144f6]{background:rgba(24,144,255,.12);border-color:rgba(24,144,255,.35);color:#d1d4dc}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-title[data-v-693144f6]{color:#69c0ff}.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-metrics .cm-item em[data-v-693144f6]{color:#868993}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card[data-v-693144f6]{background:linear-gradient(135deg,#2a2e39,#1e222d)}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.technical[data-v-693144f6]{border-left-color:#1890ff}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.fundamental[data-v-693144f6]{border-left-color:#722ed1}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.sentiment[data-v-693144f6]{border-left-color:#eb2f96}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-header[data-v-693144f6]{color:#d1d4dc}.fast-analysis-report.theme-dark .detailed-analysis .analysis-card .analysis-card-content[data-v-693144f6]{color:#868993}.fast-analysis-report.theme-dark .detail-section[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section[data-v-693144f6],.fast-analysis-report.theme-dark .price-card[data-v-693144f6],.fast-analysis-report.theme-dark .score-item[data-v-693144f6]{background:#2a2e39;color:#d1d4dc}.fast-analysis-report.theme-dark .detail-section .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .section-title[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .analysis-meta[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .feedback-question[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .indicator-name[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .indicator-signal[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .price-label[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .score-header[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .section-title[data-v-693144f6]{color:#868993}.fast-analysis-report.theme-dark .detail-section .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .detail-section .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .feedback-section .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .indicators-section .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .price-card .score-value[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .indicator-value[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .price-value[data-v-693144f6],.fast-analysis-report.theme-dark .score-item .score-value[data-v-693144f6]{color:#d1d4dc}.fast-analysis-report.theme-dark .score-item.overall[data-v-693144f6]{background:linear-gradient(135deg,rgba(24,144,255,.1),#2a2e39);border-color:#1890ff}.fast-analysis-report.theme-dark .detail-list li[data-v-693144f6]{color:#868993;border-bottom-color:#363c4e}.fast-analysis-report.theme-dark .indicators-grid .indicator-item[data-v-693144f6]{background:#363c4e}.ai-analysis-container[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc(100vh - 120px);background:#f0f2f5;overflow:hidden;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.ai-analysis-container.embedded[data-v-41eda137]{height:auto;min-height:700px;background:transparent}.ai-analysis-container.embedded .main-content-full[data-v-41eda137]{-webkit-box-shadow:none;box-shadow:none;border-radius:0}.main-content-full[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden;background:#fff;border-radius:12px;height:100%;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.08);box-shadow:0 2px 8px rgba(0,0,0,.08);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.top-index-bar[data-v-41eda137]{gap:8px;padding:8px 16px;background:#f8fafc;border-bottom:1px solid #e2e8f0;font-family:SF Mono,Monaco,Consolas,monospace}.top-index-bar .indicator-box[data-v-41eda137],.top-index-bar[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.top-index-bar .indicator-box[data-v-41eda137]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:4px 10px;background:#fff;border-radius:6px;border:1px solid #e2e8f0;min-width:50px}.top-index-bar .indicator-box .ind-label[data-v-41eda137]{font-size:9px;color:#94a3b8;text-transform:uppercase}.top-index-bar .indicator-box .ind-value[data-v-41eda137]{font-size:13px;font-weight:700;color:#1e293b}.top-index-bar .indicator-box.fear-greed.extreme-fear .ind-value[data-v-41eda137]{color:#dc2626}.top-index-bar .indicator-box.fear-greed.fear .ind-value[data-v-41eda137]{color:#ea580c}.top-index-bar .indicator-box.fear-greed.neutral .ind-value[data-v-41eda137]{color:#ca8a04}.top-index-bar .indicator-box.fear-greed.greed .ind-value[data-v-41eda137]{color:#65a30d}.top-index-bar .indicator-box.fear-greed.extreme-greed .ind-value[data-v-41eda137],.top-index-bar .indicator-box.vix.low .ind-value[data-v-41eda137]{color:#16a34a}.top-index-bar .indicator-box.vix.medium .ind-value[data-v-41eda137]{color:#ca8a04}.top-index-bar .indicator-box.vix.high .ind-value[data-v-41eda137]{color:#dc2626}.top-index-bar .indicator-box.dxy .ind-value[data-v-41eda137]{color:#2563eb}.top-index-bar .indices-marquee[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-width:0}.top-index-bar .indices-marquee .marquee-track[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;-webkit-animation:marquee-41eda137 35s linear infinite;animation:marquee-41eda137 35s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content}.top-index-bar .indices-marquee .marquee-track[data-v-41eda137]:hover{-webkit-animation-play-state:paused;animation-play-state:paused}.top-index-bar .indices-marquee .index-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:4px;padding:4px 8px;background:#fff;border-radius:4px;border:1px solid #e2e8f0;font-size:11px;white-space:nowrap}.top-index-bar .indices-marquee .index-item .idx-flag[data-v-41eda137]{font-size:11px}.top-index-bar .indices-marquee .index-item .idx-symbol[data-v-41eda137]{color:#64748b;font-weight:500}.top-index-bar .indices-marquee .index-item .idx-price[data-v-41eda137]{color:#1e293b;font-weight:600}.top-index-bar .indices-marquee .index-item .idx-change[data-v-41eda137]{font-weight:600;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:1px}.top-index-bar .indices-marquee .index-item .idx-change.up[data-v-41eda137]{color:#16a34a}.top-index-bar .indices-marquee .index-item .idx-change.down[data-v-41eda137]{color:#dc2626}@-webkit-keyframes marquee-41eda137{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes marquee-41eda137{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.top-index-bar .refresh-btn[data-v-41eda137]{color:#94a3b8;-ms-flex-negative:0;flex-shrink:0}.top-index-bar .refresh-btn[data-v-41eda137]:hover{color:#1e293b}.main-body[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:12px;overflow:hidden;min-height:0}.left-panel[data-v-41eda137],.main-body[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.left-panel[data-v-41eda137]{width:280px;-ms-flex-negative:0;flex-shrink:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow-y:auto}.left-panel .heatmap-box[data-v-41eda137]{background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0}.left-panel .heatmap-box .box-header[data-v-41eda137]{margin-bottom:10px}.left-panel .heatmap-box .box-header[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper{font-size:10px;padding:0 6px;height:22px;line-height:20px}.left-panel .heatmap-box .box-header[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff);color:#fff}.left-panel .heatmap-box .heatmap-grid[data-v-41eda137]{display:grid;grid-template-columns:repeat(3,1fr);gap:4px}.left-panel .heatmap-box .heatmap-grid .heat-cell[data-v-41eda137]{padding:6px 4px;border-radius:4px;text-align:center;font-size:9px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-name[data-v-41eda137]{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-price[data-v-41eda137]{display:block;font-size:9px;opacity:.8;margin-bottom:1px}.left-panel .heatmap-box .heatmap-grid .heat-cell .heat-val[data-v-41eda137]{font-weight:700;font-size:10px}.left-panel .calendar-box[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;background:#fff;border-radius:8px;padding:12px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:0;overflow:hidden}.left-panel .calendar-box .box-header[data-v-41eda137]{margin-bottom:8px}.left-panel .calendar-box .box-header .box-title[data-v-41eda137]{font-size:12px;color:#64748b;font-weight:600}.left-panel .calendar-box .box-header .box-title .anticon[data-v-41eda137]{margin-right:6px;color:var(--primary-color,#1890ff)}.left-panel .calendar-box .calendar-list[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto}.left-panel .calendar-box .calendar-list[data-v-41eda137]::-webkit-scrollbar{width:4px}.left-panel .calendar-box .calendar-list[data-v-41eda137]::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:2px}.left-panel .calendar-box .calendar-list .cal-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;padding:6px 0;border-bottom:1px solid #f1f5f9;font-size:10px}.left-panel .calendar-box .calendar-list .cal-item[data-v-41eda137]:last-child{border-bottom:none}.left-panel .calendar-box .calendar-list .cal-item.high[data-v-41eda137]{border-left:3px solid #dc2626;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.medium[data-v-41eda137]{border-left:3px solid #ca8a04;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item.low[data-v-41eda137]{border-left:3px solid #16a34a;padding-left:8px;margin-left:-4px}.left-panel .calendar-box .calendar-list .cal-item .cal-date[data-v-41eda137]{font-size:9px;color:#94a3b8;min-width:32px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-time[data-v-41eda137]{color:#64748b;min-width:36px;font-weight:500}.left-panel .calendar-box .calendar-list .cal-item .cal-flag[data-v-41eda137]{font-size:12px}.left-panel .calendar-box .calendar-list .cal-item .cal-name[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;color:#334155;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.left-panel .calendar-box .calendar-list .cal-item .cal-impact[data-v-41eda137]{font-weight:600;font-size:10px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bullish[data-v-41eda137]{color:#16a34a}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.bearish[data-v-41eda137]{color:#dc2626}.left-panel .calendar-box .calendar-list .cal-item .cal-impact.neutral[data-v-41eda137]{color:#94a3b8}.left-panel .calendar-box .calendar-list .cal-empty[data-v-41eda137]{text-align:center;color:#94a3b8;padding:20px 0;font-size:12px}.right-panel[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;overflow:hidden;background:#fff;border-radius:8px;border:1px solid #e2e8f0}.right-panel .analysis-toolbar[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #f1f5f9;background:#fafafa;border-radius:8px 8px 0 0}.right-panel .analysis-toolbar .symbol-selector[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;max-width:320px}.right-panel .analysis-toolbar .analyze-button[data-v-41eda137]{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)}.right-panel .analysis-toolbar .history-button[data-v-41eda137]{border-color:#d9d9d9}.right-panel .analysis-main[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto;padding:16px;min-height:0}.right-panel .analysis-main .analysis-placeholder[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;min-height:300px}.right-panel .analysis-main .analysis-placeholder .placeholder-content[data-v-41eda137]{text-align:center}.right-panel .analysis-main .analysis-placeholder .placeholder-content .placeholder-icon[data-v-41eda137]{font-size:72px;color:var(--primary-color,#1890ff);opacity:.5;margin-bottom:20px}.right-panel .analysis-main .analysis-placeholder .placeholder-content h3[data-v-41eda137]{font-size:18px;color:#1e293b;margin-bottom:8px}.right-panel .analysis-main .analysis-placeholder .placeholder-content p[data-v-41eda137]{font-size:14px;color:#64748b}.watchlist-panel[data-v-41eda137]{width:200px;-ms-flex-negative:0;flex-shrink:0;background:#fff;border-radius:8px;border:1px solid #e2e8f0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.watchlist-panel .panel-header[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #f1f5f9;background:#fafafa}.watchlist-panel .panel-header .panel-title[data-v-41eda137]{font-size:12px;font-weight:600;color:#64748b}.watchlist-panel .panel-header .panel-title .anticon[data-v-41eda137]{color:#facc15;margin-right:6px}.watchlist-panel .watchlist-list[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:8px}.watchlist-panel .watchlist-list[data-v-41eda137]::-webkit-scrollbar{width:4px}.watchlist-panel .watchlist-list[data-v-41eda137]::-webkit-scrollbar-thumb{background:#e2e8f0;border-radius:2px}.watchlist-panel .watchlist-list .watchlist-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:8px 10px;border-radius:6px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;margin-bottom:4px}.watchlist-panel .watchlist-list .watchlist-item[data-v-41eda137]:hover{background:#f8fafc}.watchlist-panel .watchlist-list .watchlist-item.active[data-v-41eda137]{background:#e6f7ff;border:1px solid #91d5ff}.watchlist-panel .watchlist-list .watchlist-item .item-main[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.watchlist-panel .watchlist-list .watchlist-item .item-main .item-symbol[data-v-41eda137]{display:block;font-size:12px;font-weight:600;color:#1e293b}.watchlist-panel .watchlist-list .watchlist-item .item-main .item-name[data-v-41eda137]{display:block;font-size:10px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.watchlist-panel .watchlist-list .watchlist-item .item-price[data-v-41eda137]{text-align:right;margin-right:8px;font-family:SF Mono,Monaco,monospace}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-value[data-v-41eda137]{display:block;font-size:11px;font-weight:600;color:#1e293b}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-change[data-v-41eda137]{display:block;font-size:10px;font-weight:600}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-change.up[data-v-41eda137]{color:#16a34a}.watchlist-panel .watchlist-list .watchlist-item .item-price .price-change.down[data-v-41eda137]{color:#dc2626}.watchlist-panel .watchlist-list .watchlist-item .item-remove[data-v-41eda137]{color:#cbd5e1;font-size:12px;opacity:0;-webkit-transition:opacity .2s;transition:opacity .2s}.watchlist-panel .watchlist-list .watchlist-item .item-remove[data-v-41eda137]:hover{color:#dc2626}.watchlist-panel .watchlist-list .watchlist-item:hover .item-remove[data-v-41eda137]{opacity:1}.watchlist-panel .watchlist-list .watchlist-empty[data-v-41eda137]{text-align:center;padding:24px 12px;color:#94a3b8}.watchlist-panel .watchlist-list .watchlist-empty .anticon[data-v-41eda137]{font-size:32px;margin-bottom:8px;display:block}.watchlist-panel .watchlist-list .watchlist-empty p[data-v-41eda137]{font-size:12px;margin-bottom:12px}@-webkit-keyframes pulse-41eda137{0%,to{opacity:1}50%{opacity:.5}}@keyframes pulse-41eda137{0%,to{opacity:1}50%{opacity:.5}}@media (max-width:992px){.ai-analysis-container[data-v-41eda137]{height:auto;min-height:calc(100vh - 64px);overflow-y:auto}.main-content-full[data-v-41eda137]{height:auto;min-height:auto}.top-index-bar[data-v-41eda137]{-ms-flex-wrap:wrap;flex-wrap:wrap;padding:8px}.top-index-bar .indicator-box[data-v-41eda137]{min-width:45px;padding:3px 6px}.top-index-bar .indices-marquee[data-v-41eda137]{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10;width:100%;margin-top:8px}.main-body[data-v-41eda137]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:12px}.left-panel[data-v-41eda137]{width:100%;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;gap:12px}.left-panel .calendar-box[data-v-41eda137],.left-panel .heatmap-box[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.left-panel .calendar-box[data-v-41eda137]{max-height:200px}.right-panel .analysis-toolbar[data-v-41eda137]{-ms-flex-wrap:wrap;flex-wrap:wrap}.right-panel .analysis-toolbar .symbol-selector[data-v-41eda137]{width:100%!important;max-width:none!important}.right-panel .analysis-toolbar .analyze-button[data-v-41eda137],.right-panel .analysis-toolbar .history-button[data-v-41eda137]{-webkit-box-flex:1;-ms-flex:1;flex:1}.watchlist-panel[data-v-41eda137]{width:100%;max-height:200px;-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}}.ai-analysis-container.theme-dark[data-v-41eda137]{background:#131722;color:#d1d4dc}.ai-analysis-container.theme-dark .main-content-full[data-v-41eda137]{background:#1e222d;-webkit-box-shadow:0 2px 8px rgba(0,0,0,.3);box-shadow:0 2px 8px rgba(0,0,0,.3)}.ai-analysis-container.theme-dark .top-index-bar[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .top-index-bar .indicator-box[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-label[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .top-index-bar .indicator-box .ind-value[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-symbol[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .top-index-bar .indices-marquee .index-item .idx-price[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .top-index-bar .refresh-btn[data-v-41eda137]:hover{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-panel[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-panel .panel-header[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-panel .panel-header .panel-title[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item[data-v-41eda137]:hover{background:#363c4e}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item.active[data-v-41eda137]{background:rgba(24,144,255,.1);border-color:#1890ff}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item .item-main .item-symbol[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item .item-main .item-name[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item .item-price .price-value[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-empty[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .watchlist-bar-legacy[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip.active[data-v-41eda137],.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-41eda137]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.1)}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-symbol[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip .chip-price[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper{background:#1e222d;border-color:#363c4e;color:#868993}.ai-analysis-container.theme-dark .left-panel .heatmap-box[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper:hover{color:#d1d4dc}.ai-analysis-container.theme-dark .left-panel .calendar-box[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .left-panel .calendar-box .box-title[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item[data-v-41eda137]{border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-date[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-time[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-item .cal-name[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .left-panel .calendar-box .cal-empty[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark .right-panel[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .right-panel .analysis-toolbar[data-v-41eda137]{background:#1e222d;border-bottom-color:#363c4e}.ai-analysis-container.theme-dark .right-panel .analysis-toolbar .history-button[data-v-41eda137]{background:#2a2e39;border-color:#363c4e;color:#d1d4dc}.ai-analysis-container.theme-dark .right-panel .analysis-main .analysis-placeholder .placeholder-content h3[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .right-panel .analysis-main .analysis-placeholder .placeholder-content p[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-bar-compat[data-v-41eda137]{background:#1e222d;border-top-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-compat .bar-label[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-41eda137]{background:#2a2e39;border-color:#363c4e}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip.active[data-v-41eda137],.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-41eda137]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.1)}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-symbol[data-v-41eda137]{color:#d1d4dc}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-price[data-v-41eda137]{color:#868993}.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip .chip-remove[data-v-41eda137]{color:#64748b}.ai-analysis-container.theme-dark[data-v-41eda137] .symbol-selector .ant-select-selection{background-color:#2a2e39;border-color:#363c4e;color:#d1d4dc}.add-stock-modal-content .market-tabs[data-v-41eda137]{margin-bottom:16px}.add-stock-modal-content .hot-symbols-section[data-v-41eda137],.add-stock-modal-content .search-results-section[data-v-41eda137],.add-stock-modal-content .symbol-search-section[data-v-41eda137]{margin-bottom:24px}.add-stock-modal-content .hot-symbols-section .section-title[data-v-41eda137],.add-stock-modal-content .search-results-section .section-title[data-v-41eda137]{font-size:14px;font-weight:600;color:#262626;margin-bottom:12px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.add-stock-modal-content .symbol-list[data-v-41eda137]{max-height:200px;overflow-y:auto;border:1px solid #e8e8e8;border-radius:4px}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-41eda137]{cursor:pointer;padding:8px 12px;-webkit-transition:background-color .3s;transition:background-color .3s}.add-stock-modal-content .symbol-list .symbol-list-item[data-v-41eda137]:hover{background-color:#f5f5f5}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-code[data-v-41eda137]{font-weight:600;color:#262626;min-width:80px}.add-stock-modal-content .symbol-list .symbol-list-item .symbol-item-content .symbol-name[data-v-41eda137]{color:#595959;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.add-stock-modal-content .selected-symbol-section[data-v-41eda137]{margin-top:16px}.add-stock-modal-content .selected-symbol-section .selected-symbol-info[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.skeleton-box .skeleton-text[data-v-41eda137]{display:block;height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;border-radius:4px;margin:3px 0}.skeleton-box .skeleton-text.short[data-v-41eda137]{width:40px;height:9px}.skeleton-cell[data-v-41eda137]{background:#f8fafc!important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:8px 4px}.skeleton-cell .skeleton-text[data-v-41eda137]{width:80%;height:10px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;border-radius:3px;margin:2px 0}.skeleton-cell .skeleton-text.short[data-v-41eda137]{width:50%;height:8px}.skeleton-item[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;padding:6px 0}.skeleton-item .skeleton-text[data-v-41eda137]{height:12px;background:-webkit-gradient(linear,left top,right top,color-stop(25%,#e2e8f0),color-stop(50%,#f1f5f9),color-stop(75%,#e2e8f0));background:linear-gradient(90deg,#e2e8f0 25%,#f1f5f9 50%,#e2e8f0 75%);background-size:200% 100%;-webkit-animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;animation:skeleton-pulse-41eda137 1.5s ease-in-out infinite;border-radius:4px;-webkit-box-flex:1;-ms-flex:1;flex:1}.skeleton-item .skeleton-text.short[data-v-41eda137]{-webkit-box-flex:0;-ms-flex:none;flex:none;width:40px}.indices-empty[data-v-41eda137],.indices-loading[data-v-41eda137]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%;font-size:11px;color:#94a3b8;padding:4px 16px}.indices-loading .anticon[data-v-41eda137]{margin-right:6px}.heatmap-empty[data-v-41eda137]{grid-column:-1;text-align:center;padding:20px;color:#94a3b8;font-size:12px}@-webkit-keyframes skeleton-pulse-41eda137{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes skeleton-pulse-41eda137{0%{background-position:200% 0}to{background-position:-200% 0}}.theme-dark .skeleton-box .skeleton-text[data-v-41eda137],.theme-dark .skeleton-cell .skeleton-text[data-v-41eda137],.theme-dark .skeleton-item .skeleton-text[data-v-41eda137]{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#363c4e),color-stop(50%,#424857),color-stop(75%,#363c4e));background:linear-gradient(90deg,#363c4e 25%,#424857 50%,#363c4e 75%);background-size:200% 100%}.theme-dark .skeleton-cell[data-v-41eda137]{background:#2a2e39!important}.theme-dark .heatmap-empty[data-v-41eda137],.theme-dark .indices-empty[data-v-41eda137],.theme-dark .indices-loading[data-v-41eda137]{color:#64748b} \ No newline at end of file diff --git a/frontend/dist/css/958.729cfe93.css b/frontend/dist/css/958.729cfe93.css deleted file mode 100644 index 982c1cf..0000000 --- a/frontend/dist/css/958.729cfe93.css +++ /dev/null @@ -1 +0,0 @@ -.quick-trade-drawer[data-v-0d547552] .ant-drawer-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow-y:auto}.qt-header[data-v-0d547552]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid #f0f0f0}.qt-header .qt-header-left[data-v-0d547552],.qt-header[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-header .qt-header-left[data-v-0d547552]{gap:8px}.qt-header .qt-header-left .qt-icon[data-v-0d547552]{font-size:20px;color:#1890ff}.qt-header .qt-header-left .qt-header-title[data-v-0d547552]{font-size:16px;font-weight:600}.qt-header .qt-close[data-v-0d547552]{font-size:16px;cursor:pointer;color:#999}.qt-header .qt-close[data-v-0d547552]:hover{color:#333}.qt-symbol-bar[data-v-0d547552]{padding:12px 20px;background:linear-gradient(135deg,#f6f8fc,#eef2f8);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;gap:8px}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552],.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select{width:100%}.qt-symbol-bar .qt-symbol-selector[data-v-0d547552] .ant-select-selection{border-radius:6px;border:1px solid #d9d9d9}.qt-symbol-bar .qt-price-display[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.qt-symbol-bar .qt-price-display .qt-current-price[data-v-0d547552]{font-size:16px;font-weight:600;color:#333}.qt-symbol-option[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{font-weight:600;font-size:14px}.qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999;font-size:12px}.qt-section[data-v-0d547552]{padding:8px 20px}.qt-section .qt-label[data-v-0d547552]{font-size:12px;color:#999;margin-bottom:4px;font-weight:500}.qt-section .qt-crypto-hint[data-v-0d547552]{font-size:10px;color:#faad14;background:rgba(250,173,20,.1);padding:1px 6px;border-radius:4px;margin-left:4px}.qt-balance[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;margin-top:6px;font-size:12px}.qt-balance .qt-balance-label[data-v-0d547552]{color:#999}.qt-balance .qt-balance-value[data-v-0d547552]{color:#52c41a;font-weight:600}.qt-direction-toggle[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px}.qt-direction-toggle .qt-dir-btn[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:10px;text-align:center;border-radius:8px;font-weight:600;font-size:14px;cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border:2px solid transparent;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-direction-toggle .qt-dir-long[data-v-0d547552]{color:#52c41a;background:rgba(82,196,26,.06);border-color:rgba(82,196,26,.2)}.qt-direction-toggle .qt-dir-long.active[data-v-0d547552]{background:#52c41a;color:#fff;border-color:#52c41a;-webkit-box-shadow:0 4px 12px rgba(82,196,26,.3);box-shadow:0 4px 12px rgba(82,196,26,.3)}.qt-direction-toggle .qt-dir-long[data-v-0d547552]:hover:not(.active){border-color:#52c41a}.qt-direction-toggle .qt-dir-short[data-v-0d547552]{color:#f5222d;background:rgba(245,34,45,.06);border-color:rgba(245,34,45,.2)}.qt-direction-toggle .qt-dir-short.active[data-v-0d547552]{background:#f5222d;color:#fff;border-color:#f5222d;-webkit-box-shadow:0 4px 12px rgba(245,34,45,.3);box-shadow:0 4px 12px rgba(245,34,45,.3)}.qt-direction-toggle .qt-dir-short[data-v-0d547552]:hover:not(.active){border-color:#f5222d}.qt-quick-amounts[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:6px;margin-top:6px}.qt-quick-amounts button[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px}.qt-leverage-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.qt-tpsl-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:12px}.qt-tpsl-row .qt-tpsl-item[data-v-0d547552]{-webkit-box-flex:1;-ms-flex:1;flex:1}.qt-submit-section[data-v-0d547552]{padding:12px 20px}.qt-submit-section .qt-submit-btn[data-v-0d547552]{height:48px;font-size:16px;font-weight:700;border-radius:8px;letter-spacing:.5px}.qt-submit-section .qt-btn-long[data-v-0d547552]{background:#52c41a!important;border-color:#52c41a!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:hover{background:#73d13d!important}.qt-submit-section .qt-btn-long[data-v-0d547552]:active{background:#389e0d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]{background:#f5222d!important;border-color:#f5222d!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:hover{background:#ff4d4f!important}.qt-submit-section .qt-btn-short[data-v-0d547552]:active{background:#cf1322!important}.qt-position-section[data-v-0d547552]{padding:8px 20px 12px}.qt-position-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;margin-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-history-section[data-v-0d547552]{padding:8px 20px 12px}.qt-history-section[data-v-0d547552] .ant-collapse{background:transparent;border:none}.qt-history-section[data-v-0d547552] .ant-collapse-item{border:none}.qt-history-section[data-v-0d547552] .ant-collapse-header{padding:0!important;cursor:pointer}.qt-history-section[data-v-0d547552] .ant-collapse-header:hover{opacity:.8}.qt-history-section[data-v-0d547552] .ant-collapse-content{border:none;background:transparent}.qt-history-section[data-v-0d547552] .ant-collapse-content-box{padding:8px 0 0 0!important}.qt-history-section .qt-section-header[data-v-0d547552]{font-size:13px;font-weight:600;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.qt-history-section .qt-history-count[data-v-0d547552]{font-size:12px;color:#999;font-weight:400}.qt-position-card[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:10px 12px;border-left:3px solid #d9d9d9}.qt-position-card.long[data-v-0d547552]{border-left-color:#52c41a}.qt-position-card.short[data-v-0d547552]{border-left-color:#f5222d}.qt-position-card .qt-pos-row[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:13px;padding:2px 0}.qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#999}.qt-position-empty[data-v-0d547552]{background:#fafafa;border-radius:8px;padding:20px 12px;text-align:center;border:1px dashed #d9d9d9}.qt-green[data-v-0d547552]{color:#52c41a!important}.qt-red[data-v-0d547552]{color:#f5222d!important}.qt-trade-list .qt-trade-item[data-v-0d547552]{padding:6px 0;border-bottom:1px solid #f5f5f5}.qt-trade-list .qt-trade-item[data-v-0d547552]:last-child{border-bottom:none}.qt-trade-list .qt-trade-item .qt-trade-main[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-symbol[data-v-0d547552]{font-weight:600;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-main .qt-trade-amount[data-v-0d547552]{margin-left:auto;font-size:13px}.qt-trade-list .qt-trade-item .qt-trade-meta[data-v-0d547552]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:2px}.qt-trade-list .qt-trade-item .qt-trade-meta .qt-trade-time[data-v-0d547552]{font-size:11px;color:#bbb}.theme-dark .qt-header[data-v-0d547552]{border-bottom-color:#303030}.theme-dark .qt-header .qt-header-title[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-header .qt-close[data-v-0d547552]{color:#666}.theme-dark .qt-header .qt-close[data-v-0d547552]:hover{color:#bbb}.theme-dark .qt-symbol-bar[data-v-0d547552]{background:linear-gradient(135deg,#1a1f2e,#141824)}.theme-dark .qt-symbol-bar .qt-current-price[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark .qt-symbol-bar[data-v-0d547552] .ant-select-selection__placeholder{color:#666}.theme-dark .qt-symbol-option .qt-symbol-option-name[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-symbol-option .qt-symbol-option-desc[data-v-0d547552]{color:#999}.theme-dark .qt-section .qt-label[data-v-0d547552]{color:#777}.theme-dark .qt-position-card[data-v-0d547552]{background:#1a1f2e}.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:first-child{color:#777}.theme-dark .qt-history-section .qt-section-header[data-v-0d547552],.theme-dark .qt-position-card .qt-pos-row span[data-v-0d547552]:last-child{color:#ccc}.theme-dark .qt-history-section .qt-history-count[data-v-0d547552]{color:#888}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-header:hover{opacity:.8}.theme-dark .qt-history-section[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark .qt-trade-item[data-v-0d547552]{border-bottom-color:#2a2a2a!important}.theme-dark .qt-trade-item .qt-trade-symbol[data-v-0d547552]{color:#e0e0e0}.theme-dark .qt-trade-item .qt-trade-amount[data-v-0d547552]{color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse{background:transparent!important;color:#ccc}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-header{color:#ccc!important}.theme-dark[data-v-0d547552] .ant-collapse .ant-collapse-content{background:transparent;color:#ccc}.theme-dark[data-v-0d547552] .ant-drawer-content{background:#141414}.theme-dark[data-v-0d547552] .ant-input-number,.theme-dark[data-v-0d547552] .ant-select-selection{background:#1a1f2e;border-color:#303030;color:#e0e0e0}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper{background:#1a1f2e;border-color:#303030;color:#ccc}.theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff;color:#fff}.theme-dark[data-v-0d547552] .ant-slider-rail{background:#303030}.theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff}.polymarket-analysis-modal .input-section .input-actions[data-v-41dfa054]{margin-top:12px}.polymarket-analysis-modal .result-section .market-info[data-v-41dfa054]{margin-bottom:24px}.polymarket-analysis-modal .result-section .market-info h3[data-v-41dfa054]{margin-bottom:12px;font-size:18px;font-weight:600}.polymarket-analysis-modal .result-section .market-info .market-meta[data-v-41dfa054]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px;-ms-flex-wrap:wrap;flex-wrap:wrap}.polymarket-analysis-modal .result-section .market-info .market-meta .meta-item[data-v-41dfa054]{color:rgba(0,0,0,.65);font-size:14px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison[data-v-41dfa054]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:16px;margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item[data-v-41dfa054]{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-label[data-v-41dfa054]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value[data-v-41dfa054]{font-size:24px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.ai-prob[data-v-41dfa054]{color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-positive[data-v-41dfa054]{color:#52c41a}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-negative[data-v-41dfa054]{color:#ff4d4f}.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.divergence-neutral[data-v-41dfa054]{color:rgba(0,0,0,.65)}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section[data-v-41dfa054]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card[data-v-41dfa054]{text-align:center;padding:16px;background:#f5f5f5;border-radius:4px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-label[data-v-41dfa054]{font-size:12px;color:rgba(0,0,0,.65);margin-bottom:8px}.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-value[data-v-41dfa054]{font-size:24px;font-weight:600;color:#1890ff}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section[data-v-41dfa054],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section[data-v-41dfa054]{margin:24px 0}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section h4[data-v-41dfa054],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section h4[data-v-41dfa054]{margin-bottom:12px;font-size:16px;font-weight:600}.polymarket-analysis-modal .result-section .analysis-result .key-factors-section .reasoning-text[data-v-41dfa054],.polymarket-analysis-modal .result-section .analysis-result .reasoning-section .reasoning-text[data-v-41dfa054]{line-height:1.8;color:rgba(0,0,0,.85);white-space:pre-wrap}.polymarket-analysis-modal .result-section .result-actions[data-v-41dfa054]{margin-top:24px;text-align:right}.polymarket-analysis-modal .loading-section[data-v-41dfa054]{text-align:center;padding:40px 0}.theme-dark .polymarket-analysis-modal .market-info h3[data-v-41dfa054]{color:hsla(0,0%,100%,.85)}.theme-dark .polymarket-analysis-modal .market-info .market-meta .meta-item[data-v-41dfa054]{color:hsla(0,0%,100%,.65)}.theme-dark .polymarket-analysis-modal .analysis-result .probability-comparison .prob-item[data-v-41dfa054]{background:hsla(0,0%,100%,.05)}.theme-dark .polymarket-analysis-modal .analysis-result .probability-comparison .prob-item .prob-label[data-v-41dfa054]{color:hsla(0,0%,100%,.65)}.theme-dark .polymarket-analysis-modal .analysis-result .recommendation-section .rec-card[data-v-41dfa054]{background:hsla(0,0%,100%,.05)}.theme-dark .polymarket-analysis-modal .analysis-result .recommendation-section .rec-card .rec-label[data-v-41dfa054]{color:hsla(0,0%,100%,.65)}.theme-dark .polymarket-analysis-modal .analysis-result .key-factors-section .reasoning-text[data-v-41dfa054],.theme-dark .polymarket-analysis-modal .analysis-result .key-factors-section h4[data-v-41dfa054],.theme-dark .polymarket-analysis-modal .analysis-result .reasoning-section .reasoning-text[data-v-41dfa054],.theme-dark .polymarket-analysis-modal .analysis-result .reasoning-section h4[data-v-41dfa054]{color:hsla(0,0%,100%,.85)}.ai-asset-analysis-page[data-v-20b827f5]{padding:16px;min-height:calc(100vh - 120px);background:#f0f2f5}.ai-asset-analysis-page .opp-section[data-v-20b827f5]{margin-bottom:12px}.ai-asset-analysis-page .opp-section .opp-header[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:8px;padding:0 4px}.ai-asset-analysis-page .opp-section .opp-header .opp-title[data-v-20b827f5]{font-size:14px;font-weight:600;color:#1a1a2e}.ai-asset-analysis-page .opp-section .opp-header .opp-header-right[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.ai-asset-analysis-page .opp-section .opp-header .opp-update-hint[data-v-20b827f5]{font-size:12px;color:#8c8c8c}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]{overflow:hidden;position:relative;border-radius:10px}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:after,.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:before{content:"";position:absolute;top:0;bottom:0;width:40px;z-index:2;pointer-events:none}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:before{left:0;background:-webkit-gradient(linear,left top,right top,from(#f0f2f5),to(transparent));background:linear-gradient(90deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-carousel-wrapper[data-v-20b827f5]:after{right:0;background:-webkit-gradient(linear,right top,left top,from(#f0f2f5),to(transparent));background:linear-gradient(270deg,#f0f2f5,transparent)}.ai-asset-analysis-page .opp-section .opp-track[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;gap:10px;-webkit-animation:opp-scroll-left-20b827f5 60s linear infinite;animation:opp-scroll-left-20b827f5 60s linear infinite;width:-webkit-max-content;width:-moz-max-content;width:max-content;padding:4px 0}.ai-asset-analysis-page .opp-section .opp-track.paused[data-v-20b827f5]{-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes opp-scroll-left-20b827f5{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}@keyframes opp-scroll-left-20b827f5{0%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(-50%);transform:translateX(-50%)}}.ai-asset-analysis-page .opp-section .opp-card[data-v-20b827f5]{width:190px;background:#fff;border-radius:10px;padding:12px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.06);box-shadow:0 1px 3px rgba(0,0,0,.06);cursor:pointer;-webkit-transition:all .2s;transition:all .2s;border-left:3px solid #d9d9d9;-ms-flex-negative:0;flex-shrink:0}.ai-asset-analysis-page .opp-section .opp-card.is-prediction-market[data-v-20b827f5]{width:280px;min-height:160px}.ai-asset-analysis-page .opp-section .opp-card.bullish[data-v-20b827f5]{border-left-color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card.bearish[data-v-20b827f5]{border-left-color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card.market-predictionmarket[data-v-20b827f5]{border-left-color:#13c2c2;background:linear-gradient(135deg,#fff,#f0f9ff)}.ai-asset-analysis-page .opp-section .opp-card[data-v-20b827f5]:hover{-webkit-transform:translateY(-2px);transform:translateY(-2px);-webkit-box-shadow:0 4px 12px rgba(0,0,0,.1);box-shadow:0 4px 12px rgba(0,0,0,.1)}.ai-asset-analysis-page .opp-section .opp-card .opp-top[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:6px;gap:8px}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol[data-v-20b827f5]{font-weight:700;font-size:14px;color:#1a1a2e;-webkit-box-flex:1;-ms-flex:1;flex:1;word-break:break-word;line-height:1.4}.ai-asset-analysis-page .opp-section .opp-card .opp-symbol.prediction-title[data-v-20b827f5]{font-size:13px;font-weight:600;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis}.ai-asset-analysis-page .opp-section .opp-card .opp-market-tag[data-v-20b827f5]{font-size:11px;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.ai-asset-analysis-page .opp-section .opp-card .opp-price[data-v-20b827f5]{font-size:13px;color:#595959}.ai-asset-analysis-page .opp-section .opp-card .opp-change[data-v-20b827f5]{font-size:15px;font-weight:600}.ai-asset-analysis-page .opp-section .opp-card .opp-change.up[data-v-20b827f5]{color:#52c41a}.ai-asset-analysis-page .opp-section .opp-card .opp-change.down[data-v-20b827f5]{color:#ff4d4f}.ai-asset-analysis-page .opp-section .opp-card .opp-signal[data-v-20b827f5]{margin-top:4px}.ai-asset-analysis-page .opp-section .opp-card .opp-reason[data-v-20b827f5]{font-size:11px;color:#8c8c8c;margin-top:4px;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.ai-asset-analysis-page .opp-section .opp-card .opp-actions[data-v-20b827f5]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-top:6px;gap:6px}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-20b827f5]{font-size:12px;color:#1890ff;font-weight:500;cursor:pointer}.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-20b827f5]:hover{text-decoration:underline}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]{font-size:11px;color:#fff;background:linear-gradient(135deg,#1890ff,#722ed1);padding:2px 8px;border-radius:10px;font-weight:600;cursor:pointer;white-space:nowrap;-webkit-transition:all .2s;transition:all .2s}.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]:hover{-webkit-transform:scale(1.05);transform:scale(1.05);-webkit-box-shadow:0 2px 8px rgba(114,46,209,.3);box-shadow:0 2px 8px rgba(114,46,209,.3)}.ai-asset-analysis-page .qt-floating-btn[data-v-20b827f5]{position:fixed;right:24px;bottom:80px;width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#1890ff,#722ed1);color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:24px;cursor:pointer;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4);z-index:1000;-webkit-transition:all .3s;transition:all .3s;-webkit-animation:qt-float-pulse-20b827f5 2s ease-in-out infinite;animation:qt-float-pulse-20b827f5 2s ease-in-out infinite}.ai-asset-analysis-page .qt-floating-btn[data-v-20b827f5]:hover{-webkit-transform:scale(1.1);transform:scale(1.1);-webkit-box-shadow:0 6px 24px rgba(114,46,209,.5);box-shadow:0 6px 24px rgba(114,46,209,.5)}@-webkit-keyframes qt-float-pulse-20b827f5{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}@keyframes qt-float-pulse-20b827f5{0%,to{-webkit-transform:translateY(0);transform:translateY(0)}50%{-webkit-transform:translateY(-4px);transform:translateY(-4px)}}.ai-asset-analysis-page .workspace-card[data-v-20b827f5]{border-radius:12px;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.06);box-shadow:0 1px 4px rgba(0,0,0,.06)}.ai-asset-analysis-page .workspace-card[data-v-20b827f5] .ant-card-body{padding:0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-bar{margin-bottom:0;padding:0 16px;border-bottom:1px solid #f0f0f0}.ai-asset-analysis-page .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab{font-size:15px;padding:14px 16px}.ai-asset-analysis-page .workspace-card .tab-body[data-v-20b827f5] .ai-analysis-container.embedded,.ai-asset-analysis-page .workspace-card .tab-body[data-v-20b827f5] .portfolio-container.embedded{border-radius:0;overflow:hidden}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content[data-v-20b827f5]{padding:40px 20px;text-align:center}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder .placeholder-icon[data-v-20b827f5]{font-size:64px;color:#1890ff;margin-bottom:24px}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder h3[data-v-20b827f5]{font-size:20px;font-weight:600;margin-bottom:12px;color:rgba(0,0,0,.85)}.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder p[data-v-20b827f5]{font-size:14px;color:rgba(0,0,0,.65);margin-bottom:24px}.ai-asset-analysis-page.theme-dark[data-v-20b827f5]{background:#0d1117}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-title[data-v-20b827f5]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-header .opp-update-hint[data-v-20b827f5]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-20b827f5]:before{background:-webkit-gradient(linear,left top,right top,from(#0d1117),to(transparent));background:linear-gradient(90deg,#0d1117,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-carousel-wrapper[data-v-20b827f5]:after{background:-webkit-gradient(linear,right top,left top,from(#0d1117),to(transparent));background:linear-gradient(270deg,#0d1117,transparent)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-20b827f5]{background:#161b22;border-color:#30363d;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card.market-predictionmarket[data-v-20b827f5]{background:linear-gradient(135deg,#161b22,#0d1419);border-left-color:#13c2c2}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-symbol[data-v-20b827f5]{color:#e6edf3}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-price[data-v-20b827f5],.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-reason[data-v-20b827f5]{color:#8b949e}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-action[data-v-20b827f5]{color:#58a6ff}.ai-asset-analysis-page.theme-dark .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]{background:linear-gradient(135deg,#58a6ff,#8957e5)}.ai-asset-analysis-page.theme-dark .opp-section .opp-card[data-v-20b827f5]:hover{-webkit-box-shadow:0 4px 12px rgba(0,0,0,.4);box-shadow:0 4px 12px rgba(0,0,0,.4)}.ai-asset-analysis-page.theme-dark .workspace-card[data-v-20b827f5]{background:#161b22;border-color:#30363d}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-bar{border-bottom-color:#30363d}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab{color:#8b949e}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab:hover{color:#c9d1d9}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-tab-active{color:#58a6ff}.ai-asset-analysis-page.theme-dark .workspace-card .workspace-tabs[data-v-20b827f5] .ant-tabs-ink-bar{background-color:#58a6ff} \ No newline at end of file diff --git a/frontend/dist/css/app.23a9a8f8.css b/frontend/dist/css/app.23a9a8f8.css new file mode 100644 index 0000000..e0637d8 --- /dev/null +++ b/frontend/dist/css/app.23a9a8f8.css @@ -0,0 +1 @@ +.ant-pro-header-menu .anticon{margin-right:8px}.ant-pro-header-menu .ant-dropdown-menu-item{min-width:160px}.ant-pro-drop-down{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:64px;line-height:64px;padding:0 12px;vertical-align:top;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-pro-drop-down:hover{background:rgba(0,0,0,.04)}.ant-pro-drop-down>i{font-size:16px!important;-webkit-transform:none!important;transform:none!important}.ant-pro-drop-down>i svg{position:relative;top:-1px}@media (max-width:768px){.ant-pro-drop-down{padding:0 8px}}#userLayout.user-layout-wrapper[data-v-7ae30672]{height:100%}#userLayout.user-layout-wrapper.mobile .container .main[data-v-7ae30672]{max-width:368px;width:98%}#userLayout.user-layout-wrapper .container[data-v-7ae30672]{width:100%;min-height:100%;background:#f0f2f5 url(/img/background.ed05d5bd.svg) no-repeat 50%;background-size:100%;position:relative}#userLayout.user-layout-wrapper .container .fx-layer[data-v-7ae30672]{position:absolute;inset:0;overflow:hidden;z-index:0;pointer-events:none}#userLayout.user-layout-wrapper .container .fx-layer .fx-gradient[data-v-7ae30672]{position:absolute;inset:-20% -20% -20% -20%;background:radial-gradient(1200px 600px at 10% 10%,rgba(78,161,255,.18),transparent 60%),radial-gradient(900px 500px at 90% 20%,rgba(127,92,255,.18),transparent 60%),radial-gradient(800px 500px at 30% 90%,rgba(0,210,170,.14),transparent 60%);-webkit-filter:blur(20px);filter:blur(20px);-webkit-animation:fxFloat-7ae30672 18s ease-in-out infinite alternate;animation:fxFloat-7ae30672 18s ease-in-out infinite alternate;-webkit-transform:translateZ(0);transform:translateZ(0)}#userLayout.user-layout-wrapper .container .fx-layer .fx-grid[data-v-7ae30672]{position:absolute;inset:0;background-image:linear-gradient(hsla(0,0%,100%,.06) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.06) 1px,transparent 0);background-size:44px 44px,44px 44px;background-position:0 0,0 0;mix-blend-mode:overlay;-webkit-animation:gridDrift-7ae30672 40s linear infinite;animation:gridDrift-7ae30672 40s linear infinite}#userLayout.user-layout-wrapper .container .user-layout-lang[data-v-7ae30672]{width:100%;height:40px;line-height:44px;text-align:right}#userLayout.user-layout-wrapper .container .user-layout-lang .select-lang-trigger[data-v-7ae30672]{cursor:pointer;padding:12px;margin-right:24px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:18px;vertical-align:middle}#userLayout.user-layout-wrapper .container .user-layout-content[data-v-7ae30672]{padding:32px 0 24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:calc(100vh - 40px);position:relative;z-index:1}#userLayout.user-layout-wrapper .container .user-layout-content .top[data-v-7ae30672]{text-align:center}#userLayout.user-layout-wrapper .container .user-layout-content .top .header[data-v-7ae30672]{height:56px;line-height:56px}#userLayout.user-layout-wrapper .container .user-layout-content .top .header .badge[data-v-7ae30672]{position:absolute;display:inline-block;line-height:1;vertical-align:middle;margin-left:-12px;margin-top:-10px;opacity:.8}#userLayout.user-layout-wrapper .container .user-layout-content .top .header .logo[data-v-7ae30672]{width:342px;max-width:42vw;height:auto;vertical-align:middle;margin-right:0;border-style:none}#userLayout.user-layout-wrapper .container .user-layout-content .top .header .title[data-v-7ae30672]{font-size:33px;color:rgba(0,0,0,.85);font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:600;position:relative;top:2px}#userLayout.user-layout-wrapper .container .user-layout-content .top .desc[data-v-7ae30672]{font-size:14px;color:rgba(0,0,0,.45);margin-top:12px;margin-bottom:40px}#userLayout.user-layout-wrapper .container .user-layout-content .main[data-v-7ae30672]{min-width:320px;width:480px;margin:0 auto}#userLayout.user-layout-wrapper .container .user-layout-content .main-content[data-v-7ae30672]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#userLayout.user-layout-wrapper .container .user-layout-content .footer[data-v-7ae30672]{width:100%;padding:0 16px;margin-top:auto;margin-bottom:16px;text-align:center}#userLayout.user-layout-wrapper .container .user-layout-content .footer .links[data-v-7ae30672]{margin-bottom:8px;font-size:14px}#userLayout.user-layout-wrapper .container .user-layout-content .footer .links a[data-v-7ae30672]{color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}#userLayout.user-layout-wrapper .container .user-layout-content .footer .links a[data-v-7ae30672]:not(:last-child){margin-right:40px}#userLayout.user-layout-wrapper .container .user-layout-content .footer .copyright[data-v-7ae30672]{color:rgba(0,0,0,.45);font-size:14px}#userLayout.user-layout-wrapper .container a[data-v-7ae30672]{text-decoration:none}@media (max-width:576px){#userLayout.user-layout-wrapper .container .user-layout-content .top .header .logo[data-v-7ae30672]{width:208px;max-width:70vw;margin-top:8px}#userLayout.user-layout-wrapper .container .user-layout-content .main[data-v-7ae30672]{width:92vw}}@-webkit-keyframes fxFloat-7ae30672{0%{-webkit-transform:translate3d(-2%,-1%,0) scale(1);transform:translate3d(-2%,-1%,0) scale(1)}50%{-webkit-transform:translate3d(1%,2%,0) scale(1.02);transform:translate3d(1%,2%,0) scale(1.02)}to{-webkit-transform:translate3d(3%,-2%,0) scale(1.04);transform:translate3d(3%,-2%,0) scale(1.04)}}@keyframes fxFloat-7ae30672{0%{-webkit-transform:translate3d(-2%,-1%,0) scale(1);transform:translate3d(-2%,-1%,0) scale(1)}50%{-webkit-transform:translate3d(1%,2%,0) scale(1.02);transform:translate3d(1%,2%,0) scale(1.02)}to{-webkit-transform:translate3d(3%,-2%,0) scale(1.04);transform:translate3d(3%,-2%,0) scale(1.04)}}@-webkit-keyframes gridDrift-7ae30672{0%{background-position:0 0,0 0;-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{background-position:22px 22px,22px 22px}to{background-position:44px 44px,44px 44px;-webkit-transform:rotate(3.6deg);transform:rotate(3.6deg)}}@keyframes gridDrift-7ae30672{0%{background-position:0 0,0 0;-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{background-position:22px 22px,22px 22px}to{background-position:44px 44px,44px 44px;-webkit-transform:rotate(3.6deg);transform:rotate(3.6deg)}}.ant-pro-drop-down .action{margin-right:8px}.ant-pro-drop-down .ant-dropdown-menu-item{min-width:160px}.ant-layout.dark .ant-dropdown-menu,.ant-layout.realdark .ant-dropdown-menu,.ant-pro-layout.dark .ant-dropdown-menu,.ant-pro-layout.realdark .ant-dropdown-menu,body.dark .ant-dropdown-menu,body.realdark .ant-dropdown-menu{background-color:#1f1f1f;border:1px solid #303030;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.3);box-shadow:0 4px 12px rgba(0,0,0,.3)}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item,body.dark .ant-dropdown-menu .ant-dropdown-menu-item,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item{color:hsla(0,0%,100%,.85)}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover,body.dark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,body.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover{background-color:#262626;color:#1890ff}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,body.dark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item .anticon{color:hsla(0,0%,100%,.85)}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider,body.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider{background-color:#303030}.notice-icon-wrapper[data-v-7e99442e]{display:inline-block;vertical-align:top}.header-notice[data-v-7e99442e]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:64px;line-height:64px;-webkit-transition:all .3s;transition:all .3s;cursor:pointer;padding:0 12px;vertical-align:top}.header-notice[data-v-7e99442e]:hover{background:rgba(0,0,0,.04)}.header-notice span[data-v-7e99442e]{vertical-align:initial}@media (max-width:768px){.header-notice[data-v-7e99442e]{padding:0 8px}}.notice-header[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 16px;border-bottom:1px solid #f0f0f0}.notice-header .notice-title[data-v-7e99442e]{font-weight:500;font-size:14px}.notice-header .notice-action[data-v-7e99442e]{font-size:12px;color:#1890ff;cursor:pointer}.notice-header .notice-action[data-v-7e99442e]:hover{color:#40a9ff}.notice-list[data-v-7e99442e]{max-height:400px;overflow-y:auto}.notice-item[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 16px;cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.notice-item[data-v-7e99442e]:hover{background:#f5f5f5}.notice-item.unread[data-v-7e99442e]{background:#e6f7ff}.notice-item.unread[data-v-7e99442e]:hover{background:#bae7ff}.notice-item .notice-item-icon[data-v-7e99442e]{-ms-flex-negative:0;flex-shrink:0;width:32px;height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:#f0f0f0;border-radius:50%;margin-right:12px;font-size:16px}.notice-item .notice-item-content[data-v-7e99442e]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.notice-item .notice-item-content .notice-item-title[data-v-7e99442e]{font-weight:500;font-size:13px;color:rgba(0,0,0,.85);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.notice-item .notice-item-content .notice-item-desc[data-v-7e99442e]{font-size:12px;color:rgba(0,0,0,.45);line-height:1.5;margin-bottom:4px}.notice-item .notice-item-content .notice-item-time[data-v-7e99442e]{font-size:11px;color:rgba(0,0,0,.25)}.notice-empty[data-v-7e99442e]{padding:48px 0}.notice-footer[data-v-7e99442e]{text-align:center;padding:12px;border-top:1px solid #f0f0f0}.notice-footer a[data-v-7e99442e]{color:#1890ff;cursor:pointer}.notice-footer a[data-v-7e99442e]:hover{color:#40a9ff}.notice-detail .notice-detail-meta[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.notice-detail .notice-detail-meta .notice-detail-type[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.notice-detail .notice-detail-meta .notice-detail-type .type-label[data-v-7e99442e]{font-size:14px;color:rgba(0,0,0,.65)}.notice-detail .notice-detail-meta .notice-detail-time[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;font-size:13px;color:rgba(0,0,0,.45)}.notice-detail .notice-detail-content .message-body[data-v-7e99442e]{font-size:14px;line-height:1.8;color:rgba(0,0,0,.85);max-height:300px;overflow-y:auto;padding:8px 0}.notice-detail .notice-detail-content .message-body h2[data-v-7e99442e],.notice-detail .notice-detail-content .message-body h3[data-v-7e99442e],.notice-detail .notice-detail-content .message-body h4[data-v-7e99442e]{margin:12px 0 8px;font-weight:600}.notice-detail .notice-detail-content .message-body h2[data-v-7e99442e]{font-size:18px}.notice-detail .notice-detail-content .message-body h3[data-v-7e99442e]{font-size:16px}.notice-detail .notice-detail-content .message-body h4[data-v-7e99442e]{font-size:14px}.notice-detail .notice-detail-content .message-body li[data-v-7e99442e]{margin-left:20px;list-style:disc}.notice-detail .notice-detail-content .message-body strong[data-v-7e99442e]{font-weight:600}.notice-detail .notice-detail-content.html-report .message-body[data-v-7e99442e]{max-height:70vh;padding:0;margin:-16px -24px;overflow-y:auto}.notice-detail .notice-detail-extra .extra-title[data-v-7e99442e]{font-weight:500;font-size:14px;margin-bottom:12px;color:rgba(0,0,0,.85)}.notice-detail .notice-detail-extra .extra-item[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:8px;font-size:13px}.notice-detail .notice-detail-extra .extra-item .label[data-v-7e99442e]{-ms-flex-negative:0;flex-shrink:0;color:rgba(0,0,0,.45);margin-right:8px}.notice-detail .notice-detail-extra .extra-item .value[data-v-7e99442e]{color:rgba(0,0,0,.85);word-break:break-word}.notice-detail .notice-detail-extra .extra-item.decision[data-v-7e99442e]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.notice-detail .notice-detail-extra .extra-item.decision .confidence[data-v-7e99442e]{margin-left:8px;color:rgba(0,0,0,.45);font-size:12px}.notice-detail .notice-detail-actions[data-v-7e99442e]{margin-top:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px}.header-notice-wrapper{top:50px!important}.header-notice-wrapper .ant-popover-inner-content{padding:0}.notice-detail-modal .ant-modal-header{border-bottom:1px solid #f0f0f0}.notice-detail-modal .ant-modal-body{padding:16px 24px}.notice-detail-modal.html-report-modal .ant-modal-body{padding:0}.ant-layout.dark .header-notice-wrapper .ant-popover-inner,.ant-layout.realdark .header-notice-wrapper .ant-popover-inner,body.dark .header-notice-wrapper .ant-popover-inner,body.realdark .header-notice-wrapper .ant-popover-inner{background:#1f1f1f}.ant-layout.dark .header-notice-wrapper .ant-popover-arrow,.ant-layout.realdark .header-notice-wrapper .ant-popover-arrow,body.dark .header-notice-wrapper .ant-popover-arrow,body.realdark .header-notice-wrapper .ant-popover-arrow{border-color:#1f1f1f}.ant-layout.dark .header-notice-wrapper .notice-header,.ant-layout.realdark .header-notice-wrapper .notice-header,body.dark .header-notice-wrapper .notice-header,body.realdark .header-notice-wrapper .notice-header{border-color:#303030}.ant-layout.dark .header-notice-wrapper .notice-header .notice-title,.ant-layout.realdark .header-notice-wrapper .notice-header .notice-title,body.dark .header-notice-wrapper .notice-header .notice-title,body.realdark .header-notice-wrapper .notice-header .notice-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .header-notice-wrapper .notice-item:hover,.ant-layout.realdark .header-notice-wrapper .notice-item:hover,body.dark .header-notice-wrapper .notice-item:hover,body.realdark .header-notice-wrapper .notice-item:hover{background:#303030}.ant-layout.dark .header-notice-wrapper .notice-item.unread,.ant-layout.realdark .header-notice-wrapper .notice-item.unread,body.dark .header-notice-wrapper .notice-item.unread,body.realdark .header-notice-wrapper .notice-item.unread{background:rgba(24,144,255,.15)}.ant-layout.dark .header-notice-wrapper .notice-item.unread:hover,.ant-layout.realdark .header-notice-wrapper .notice-item.unread:hover,body.dark .header-notice-wrapper .notice-item.unread:hover,body.realdark .header-notice-wrapper .notice-item.unread:hover{background:rgba(24,144,255,.25)}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-icon,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-icon,body.dark .header-notice-wrapper .notice-item .notice-item-icon,body.realdark .header-notice-wrapper .notice-item .notice-item-icon{background:#303030}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title,body.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title,body.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc,body.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc,body.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc{color:hsla(0,0%,100%,.45)}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time,body.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time,body.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time{color:hsla(0,0%,100%,.25)}.ant-layout.dark .header-notice-wrapper .notice-footer,.ant-layout.realdark .header-notice-wrapper .notice-footer,body.dark .header-notice-wrapper .notice-footer,body.realdark .header-notice-wrapper .notice-footer{border-color:#303030}.ant-layout.dark .header-notice-wrapper .ant-empty-description,.ant-layout.realdark .header-notice-wrapper .ant-empty-description,body.dark .header-notice-wrapper .ant-empty-description,body.realdark .header-notice-wrapper .ant-empty-description{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .ant-modal-content,.ant-layout.realdark .notice-detail-modal .ant-modal-content,body.dark .notice-detail-modal .ant-modal-content,body.realdark .notice-detail-modal .ant-modal-content{background:#1f1f1f}.ant-layout.dark .notice-detail-modal .ant-modal-header,.ant-layout.realdark .notice-detail-modal .ant-modal-header,body.dark .notice-detail-modal .ant-modal-header,body.realdark .notice-detail-modal .ant-modal-header{background:#1f1f1f;border-color:#303030}.ant-layout.dark .notice-detail-modal .ant-modal-header .ant-modal-title,.ant-layout.realdark .notice-detail-modal .ant-modal-header .ant-modal-title,body.dark .notice-detail-modal .ant-modal-header .ant-modal-title,body.realdark .notice-detail-modal .ant-modal-header .ant-modal-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .notice-detail-modal .ant-modal-close-x,.ant-layout.realdark .notice-detail-modal .ant-modal-close-x,body.dark .notice-detail-modal .ant-modal-close-x,body.realdark .notice-detail-modal .ant-modal-close-x{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .ant-divider,.ant-layout.realdark .notice-detail-modal .ant-divider,body.dark .notice-detail-modal .ant-divider,body.realdark .notice-detail-modal .ant-divider{border-color:#303030}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label,body.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label,body.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label{color:hsla(0,0%,100%,.65)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time,body.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time,body.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-content .message-body,.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-content .message-body,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title,body.dark .notice-detail-modal .notice-detail .notice-detail-content .message-body,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title,body.realdark .notice-detail-modal .notice-detail .notice-detail-content .message-body,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value{color:hsla(0,0%,100%,.85)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence{color:hsla(0,0%,100%,.45)}.ant-pro-global-header-index-right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0}.ant-pro-global-header-index-right .ant-pro-global-header-index-action{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:64px;padding:0 12px;color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s;cursor:pointer;vertical-align:top}.ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover{color:#1890ff;background:rgba(0,0,0,.04)}@media (max-width:768px){.ant-pro-global-header-index-right .ant-pro-account-avatar,.ant-pro-global-header-index-right .ant-pro-drop-down,.ant-pro-global-header-index-right .ant-pro-global-header-index-action{padding:0 8px}}.ant-layout.dark .ant-pro-global-header-index-right,.ant-layout.dark .ant-pro-global-header-index-right *,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,.ant-layout.realdark .ant-pro-global-header-index-right,.ant-layout.realdark .ant-pro-global-header-index-right *,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,.ant-pro-layout.dark .ant-pro-global-header-index-right,.ant-pro-layout.dark .ant-pro-global-header-index-right *,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,.ant-pro-layout.realdark .ant-pro-global-header-index-right,.ant-pro-layout.realdark .ant-pro-global-header-index-right *,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,body.dark .ant-pro-global-header-index-right,body.dark .ant-pro-global-header-index-right *,body.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,body.realdark .ant-pro-global-header-index-right,body.realdark .ant-pro-global-header-index-right *,body.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action{color:hsla(0,0%,100%,.85)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,body.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,body.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,body.dark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,body.realdark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{background:hsla(0,0%,100%,.25)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down,.ant-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down,body.dark .ant-pro-global-header-index-right .ant-dropdown-trigger,body.dark .ant-pro-global-header-index-right .ant-pro-drop-down,body.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger,body.realdark .ant-pro-global-header-index-right .ant-pro-drop-down{color:hsla(0,0%,100%,.85)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,.ant-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,body.dark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,body.dark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,body.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,body.realdark .ant-pro-global-header-index-right .ant-pro-drop-down:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,.ant-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,body.dark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,body.dark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,body.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,body.realdark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon{color:hsla(0,0%,100%,.85)!important}.setting-drawer-index-item[data-v-e773bc98]{margin-bottom:24px}.setting-drawer-index-item .setting-drawer-index-title[data-v-e773bc98]{font-size:14px;color:rgba(0,0,0,.85);line-height:22px;margin-bottom:12px}[data-v-940007f2] .ant-drawer-handle,[data-v-940007f2] .setting-drawer-index-handle{display:none!important}.setting-drawer-index-content .setting-drawer-index-blockChecbox[data-v-940007f2]{display:-webkit-box;display:-ms-flexbox;display:flex}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item[data-v-940007f2]{margin-right:16px;position:relative;border-radius:4px;cursor:pointer}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item img[data-v-940007f2]{width:48px}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item .setting-drawer-index-selectIcon[data-v-940007f2]{position:absolute;top:0;right:0;width:100%;padding-top:15px;padding-left:24px;height:100%;color:#1890ff;font-size:14px;font-weight:700}.setting-drawer-index-content .setting-drawer-theme-color-colorBlock[data-v-940007f2]{width:20px;height:20px;border-radius:2px;float:left;cursor:pointer;margin-right:8px;padding-left:0;padding-right:0;text-align:center;color:#fff;font-weight:700}.setting-drawer-index-content .setting-drawer-theme-color-colorBlock i[data-v-940007f2]{font-size:14px}:global .ant-layout .ant-layout-footer,:global .ant-layout-footer,:global .ant-pro-layout .ant-layout-footer,:global footer.ant-layout-footer{display:none!important;height:0!important;padding:0!important;margin:0!important;border:none!important;min-height:0!important;visibility:hidden!important;overflow:hidden!important}:global .ant-layout.dark .ant-layout-header,:global .ant-layout.realdark .ant-layout-header,:global .ant-pro-layout.dark .ant-layout-header,:global .ant-pro-layout.realdark .ant-layout-header,:global body.dark .ant-layout-header,:global body.realdark .ant-layout-header{background:#111!important;border-bottom:1px solid #1c1c1c!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05),0 1px 4px rgba(0,0,0,.2)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05),0 1px 4px rgba(0,0,0,.2)!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header *,:global .ant-layout.realdark .ant-layout-header *,:global .ant-pro-layout.dark .ant-layout-header *,:global .ant-pro-layout.realdark .ant-layout-header *,:global body.dark .ant-layout-header *,:global body.realdark .ant-layout-header *{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header .anticon,:global .ant-layout.realdark .ant-layout-header .anticon,:global .ant-pro-layout.dark .ant-layout-header .anticon,:global .ant-pro-layout.realdark .ant-layout-header .anticon,:global body.dark .ant-layout-header .anticon,:global body.realdark .ant-layout-header .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header .anticon:hover,:global .ant-layout.realdark .ant-layout-header .anticon:hover,:global .ant-pro-layout.dark .ant-layout-header .anticon:hover,:global .ant-pro-layout.realdark .ant-layout-header .anticon:hover,:global body.dark .ant-layout-header .anticon:hover,:global body.realdark .ant-layout-header .anticon:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important;border-radius:4px}:global .ant-layout.dark .ant-layout-header a,:global .ant-layout.realdark .ant-layout-header a,:global .ant-pro-layout.dark .ant-layout-header a,:global .ant-pro-layout.realdark .ant-layout-header a,:global body.dark .ant-layout-header a,:global body.realdark .ant-layout-header a{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header a:hover,:global .ant-layout.realdark .ant-layout-header a:hover,:global .ant-pro-layout.dark .ant-layout-header a:hover,:global .ant-pro-layout.realdark .ant-layout-header a:hover,:global body.dark .ant-layout-header a:hover,:global body.realdark .ant-layout-header a:hover{color:#1890ff!important}:global .ant-layout.dark .ant-layout-header .ant-tooltip-open .anticon,:global .ant-layout.realdark .ant-layout-header .ant-tooltip-open .anticon,:global .ant-pro-layout.dark .ant-layout-header .ant-tooltip-open .anticon,:global .ant-pro-layout.realdark .ant-layout-header .ant-tooltip-open .anticon,:global body.dark .ant-layout-header .ant-tooltip-open .anticon,:global body.realdark .ant-layout-header .ant-tooltip-open .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.light .ant-layout-header,:global .ant-pro-layout.light .ant-layout-header,:global body.light .ant-layout-header{background:#fff!important;border-bottom:1px solid #e8e8e8!important;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08)!important;box-shadow:0 1px 4px rgba(0,21,41,.08)!important;color:rgba(0,0,0,.85)!important}:global .ant-layout.dark .ant-layout-content,:global .ant-layout.realdark .ant-layout-content,:global .ant-pro-layout.dark .ant-layout-content,:global .ant-pro-layout.realdark .ant-layout-content,:global body.dark .ant-layout-content,:global body.realdark .ant-layout-content{background:#141414!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.light .ant-layout-content,:global .ant-pro-layout.light .ant-layout-content,:global body.light .ant-layout-content{background:#f0f2f5!important;color:rgba(0,0,0,.85)!important}:global .ant-layout.dark .ant-pro-global-header,:global .ant-layout.realdark .ant-pro-global-header,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header,:global .ant-pro-layout.dark .ant-pro-global-header,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header,:global .ant-pro-layout.realdark .ant-pro-global-header,:global body.dark .ant-layout-header .ant-pro-global-header,:global body.dark .ant-pro-global-header,:global body.realdark .ant-layout-header .ant-pro-global-header,:global body.realdark .ant-pro-global-header{background:#111!important;border-bottom:none!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header *,:global .ant-layout.realdark .ant-pro-global-header *,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header *,:global .ant-pro-layout.dark .ant-pro-global-header *,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header *,:global .ant-pro-layout.realdark .ant-pro-global-header *,:global body.dark .ant-layout-header .ant-pro-global-header *,:global body.dark .ant-pro-global-header *,:global body.realdark .ant-layout-header .ant-pro-global-header *,:global body.realdark .ant-pro-global-header *{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo{background:transparent!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo h1{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo img,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo img,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo img{opacity:.9}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo *,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo *,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo *{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content{background:transparent!important;color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content *{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content .anticon:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important;border-radius:4px}:global .ant-pro-global-header-content .ant-tooltip-open .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right{background:transparent!important;color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right *{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-global-header-index-action{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}:global .ant-pro-global-header-index-right .ant-pro-global-header-index-action .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-account-avatar{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-account-avatar span{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{background:hsla(0,0%,100%,.25)!important}:global .ant-pro-global-header-index-right .ant-dropdown-trigger,:global .ant-pro-global-header-index-right .ant-pro-drop-down{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,:global .ant-pro-global-header-index-right .ant-pro-drop-down:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}:global .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,:global .ant-pro-global-header-index-right .ant-pro-drop-down .anticon{color:hsla(0,0%,100%,.85)!important}:global a{color:hsla(0,0%,100%,.85)!important}:global a:hover{color:#1890ff!important}:global .anticon{color:hsla(0,0%,100%,.85)!important}:global .anticon:hover{color:#1890ff!important}:global .ant-layout.light .ant-pro-global-header,:global .ant-pro-layout.light .ant-layout-header .ant-pro-global-header,:global .ant-pro-layout.light .ant-pro-global-header,:global body.light .ant-layout-header .ant-pro-global-header,:global body.light .ant-pro-global-header{background:#fff!important;border-bottom:1px solid #e8e8e8!important;color:rgba(0,0,0,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout),:global(.ant-pro-layout).realdark :global(.ant-layout){background-color:#0a0a0a!important}:global(.ant-pro-layout).dark :global(.ant-layout-header),:global(.ant-pro-layout).realdark :global(.ant-layout-header){background:#111!important;border-bottom:1px solid #1c1c1c!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-header) :global(.ant-pro-global-header),:global(.ant-pro-layout).realdark :global(.ant-layout-header) :global(.ant-pro-global-header){background:#111!important;border-bottom:none!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-header) :global(.ant-pro-global-header) *,:global(.ant-pro-layout).realdark :global(.ant-layout-header) :global(.ant-pro-global-header) *{color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-content),:global(.ant-pro-layout).realdark :global(.ant-layout-content){background:#141414!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-pro-basicLayout-content),:global(.ant-pro-layout).realdark :global(.ant-pro-basicLayout-content){background:#141414!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-sider),:global(.ant-pro-layout).dark :global(.ant-pro-sider),:global(.ant-pro-layout).dark :global(.ant-pro-sider-menu-sider),:global(.ant-pro-layout).realdark :global(.ant-layout-sider),:global(.ant-pro-layout).realdark :global(.ant-pro-sider),:global(.ant-pro-layout).realdark :global(.ant-pro-sider-menu-sider){background:#0a0a0a!important}:global(.ant-pro-layout).dark :global(.ant-layout-sider) :global(.ant-layout-sider-children),:global(.ant-pro-layout).dark :global(.ant-pro-sider) :global(.ant-layout-sider-children),:global(.ant-pro-layout).dark :global(.ant-pro-sider-menu-sider) :global(.ant-layout-sider-children),:global(.ant-pro-layout).realdark :global(.ant-layout-sider) :global(.ant-layout-sider-children),:global(.ant-pro-layout).realdark :global(.ant-pro-sider) :global(.ant-layout-sider-children),:global(.ant-pro-layout).realdark :global(.ant-pro-sider-menu-sider) :global(.ant-layout-sider-children){background:#0a0a0a!important}:global(.ant-pro-layout).dark :global(.ant-menu-dark .ant-menu-inline.ant-menu-sub),:global(.ant-pro-layout).dark :global(.ant-menu-dark),:global(.ant-pro-layout).dark :global(.ant-menu.ant-menu-dark),:global(.ant-pro-layout).realdark :global(.ant-menu-dark .ant-menu-inline.ant-menu-sub),:global(.ant-pro-layout).realdark :global(.ant-menu-dark),:global(.ant-pro-layout).realdark :global(.ant-menu.ant-menu-dark){background:#0a0a0a!important}:global(.ant-pro-layout).dark :global(.ant-menu-dark .ant-menu-sub),:global(.ant-pro-layout).realdark :global(.ant-menu-dark .ant-menu-sub){background:#111!important}:global(.ant-pro-layout).dark :global(.ant-menu-dark .ant-menu-item-selected),:global(.ant-pro-layout).realdark :global(.ant-menu-dark .ant-menu-item-selected){background:rgba(24,144,255,.25)!important}:global(.ant-pro-layout).dark :global(.ant-menu-dark .ant-menu-item:hover),:global(.ant-pro-layout).dark :global(.ant-menu-dark .ant-menu-submenu-title:hover),:global(.ant-pro-layout).realdark :global(.ant-menu-dark .ant-menu-item:hover),:global(.ant-pro-layout).realdark :global(.ant-menu-dark .ant-menu-submenu-title:hover){background:hsla(0,0%,100%,.06)!important}:global(.ant-pro-layout).dark :global(.ant-layout-sider-trigger),:global(.ant-pro-layout).realdark :global(.ant-layout-sider-trigger){background:#111!important;border-top:1px solid #1c1c1c;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)}:global(.ant-pro-layout).light :global(.ant-layout){background-color:#f0f2f5!important}:global(.ant-pro-layout).light :global(.ant-layout-header){background:#fff!important;border-bottom:1px solid #e8e8e8!important;color:rgba(0,0,0,.85)!important}:global(.ant-pro-layout).light :global(.ant-layout-content){background:#f0f2f5!important;color:rgba(0,0,0,.85)!important}:global(.ant-pro-layout).light :global(.ant-pro-basicLayout-content){background:#f0f2f5!important;color:rgba(0,0,0,.85)!important}.ant-pro-global-header-index-right{margin-right:8px}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-global-header-index-action{color:#030303}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-global-header-index-action:hover{background:#1890ff}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-account-avatar{color:hsla(0,0%,100%,.85)}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-account-avatar .antd-pro-global-header-index-avatar{background:hsla(0,0%,100%,.25)!important}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-account-avatar span,.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-drop-down{color:hsla(0,0%,100%,.85)}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-drop-down:hover{color:#1890ff;background:hsla(0,0%,100%,.08)}.ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{margin:20px 0;margin-right:8px;color:#1890ff;vertical-align:top;background:rgb(255 255 3%)}.ant-pro-global-header-index-right .menu .anticon{margin-right:8px}.ant-pro-global-header-index-right .menu .ant-dropdown-menu-item{min-width:100px}:global .ant-pro-layout.dark .ant-dropdown-menu,:global .ant-pro-layout.realdark .ant-dropdown-menu{background:#1c1c1c!important;border:1px solid #2a2a2a!important;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.4)!important;box-shadow:0 4px 12px rgba(0,0,0,.4)!important}:global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover{background:#252525!important;color:#1890ff!important}:global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider{background:#2a2a2a!important}:global body.dark .ant-layout-sider,:global body.dark .ant-layout-sider-dark,:global body.dark .ant-pro-sider-menu-sider,:global body.dark .ant-pro-sider-menu-sider.ant-layout-sider-dark,:global body.realdark .ant-layout-sider,:global body.realdark .ant-layout-sider-dark,:global body.realdark .ant-pro-sider-menu-sider,:global body.realdark .ant-pro-sider-menu-sider.ant-layout-sider-dark{background:#0a0a0a!important}:global body.dark .ant-layout-sider-children,:global body.realdark .ant-layout-sider-children{background:#0a0a0a!important}:global body.dark .ant-menu-dark,:global body.dark .ant-menu-dark .ant-menu-inline.ant-menu-sub,:global body.dark .ant-menu.ant-menu-dark,:global body.dark ul.ant-menu.ant-menu-dark.ant-menu-root,:global body.realdark .ant-menu-dark,:global body.realdark .ant-menu-dark .ant-menu-inline.ant-menu-sub,:global body.realdark .ant-menu.ant-menu-dark,:global body.realdark ul.ant-menu.ant-menu-dark.ant-menu-root{background:#0a0a0a!important}:global body.dark .ant-menu-dark .ant-menu-sub,:global body.dark .ant-menu.ant-menu-dark .ant-menu-sub,:global body.realdark .ant-menu-dark .ant-menu-sub,:global body.realdark .ant-menu.ant-menu-dark .ant-menu-sub{background:#111!important}:global body.dark .ant-menu-dark .ant-menu-item-selected,:global body.realdark .ant-menu-dark .ant-menu-item-selected{background:rgba(24,144,255,.25)!important}:global body.dark .ant-pro-sider-menu-logo,:global body.realdark .ant-pro-sider-menu-logo{background:#0a0a0a!important}:global body.dark .ant-layout-sider-trigger,:global body.realdark .ant-layout-sider-trigger{background:#111!important;border-top:1px solid #1c1c1c;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important}:global body.dark .ant-layout-header,:global body.realdark .ant-layout-header{background:#111!important;border-bottom:1px solid #1c1c1c!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important}:global body.dark .ant-pro-global-header,:global body.realdark .ant-pro-global-header{background:#111!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important}@media (max-width:768px){:global .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-global-header-logo,:global .ant-pro-layout .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global body .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo{padding:0!important;padding-left:0!important;padding-right:0!important;padding-top:0!important;padding-bottom:0!important}}.ant-pro-sider-menu-sider.light .ant-menu-light{height:60vh!important}.basic-layout-wrapper .ant-layout-footer{display:none!important;height:0!important;padding:0!important;margin:0!important;border:none!important}.basic-layout-wrapper{position:relative}.basic-layout-wrapper .custom-menu-footer{position:fixed;bottom:0;left:0;z-index:100;width:256px;background:#111;border-top:1px solid #1c1c1c;-webkit-transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86);transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86);max-width:256px;display:block;opacity:1}.basic-layout-wrapper .custom-menu-footer.collapsed{width:80px;max-width:80px}@media (max-width:768px){.basic-layout-wrapper .custom-menu-footer{z-index:1001}.basic-layout-wrapper .custom-menu-footer:not(.drawer-open){display:none!important;opacity:0}.basic-layout-wrapper .custom-menu-footer.drawer-animating{opacity:0;-webkit-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.basic-layout-wrapper .custom-menu-footer.drawer-open:not(.drawer-animating){opacity:1;-webkit-transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86) .1s;transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86) .1s}}.basic-layout-wrapper .custom-menu-footer .menu-footer-content{padding:12px 16px;font-size:11px;color:inherit;max-height:none;overflow:visible;scrollbar-width:thin;scrollbar-color:hsla(0,0%,100%,.2) transparent}.basic-layout-wrapper .custom-menu-footer .menu-footer-content::-webkit-scrollbar{width:4px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content::-webkit-scrollbar-track{background:transparent}.basic-layout-wrapper .custom-menu-footer .menu-footer-content::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.2);border-radius:2px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section{margin-bottom:12px;text-align:center}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section:last-child{margin-bottom:0}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-title{font-size:11px;font-weight:500;margin-bottom:6px;opacity:.8;color:inherit}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:4px;-ms-flex-wrap:wrap;flex-wrap:wrap;font-size:10px;opacity:.7}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a{cursor:pointer;color:inherit;text-decoration:underline;-webkit-transition:opacity .2s;transition:opacity .2s}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a:hover{opacity:1}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links .separator{opacity:.5;margin:0 2px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px;margin-top:6px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon{width:15px;height:15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:4px;cursor:pointer;opacity:.7;-webkit-transition:all .2s;transition:all .2s;background:hsla(0,0%,100%,.05);text-decoration:none;overflow:hidden}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon:hover{opacity:1;background:hsla(0,0%,100%,.1);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .social-icon-svg{width:15x;height:15px;color:currentColor}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .anticon{font-size:16px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .social-logo{width:15px;height:15px;-o-object-fit:contain;object-fit:contain}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .social-icon-text{font-size:10px;font-weight:700}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section.copyright{margin-top:12px;padding-top:12px;border-top:1px solid #2a2a2a;opacity:.6;font-size:10px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section.version{margin-top:4px;font-size:9px;opacity:.4;text-align:center;letter-spacing:1px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content-collapsed{text-align:center;padding:16px;font-size:12px;opacity:.6;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.basic-layout-wrapper .custom-menu-footer .menu-footer-content-collapsed .anticon{font-size:16px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content-collapsed:hover{opacity:1}.basic-layout-wrapper ::v-deep .ant-pro-layout .ant-pro-sider-collapsed~.custom-menu-footer,.basic-layout-wrapper ::v-deep .ant-pro-layout.ant-pro-sider-collapsed~.custom-menu-footer{width:80px}.basic-layout-wrapper .ant-layout-sider-children{padding-bottom:calc(var(--menu-footer-height, 220px) + 12px);overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar{width:6px}.basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-track{background:transparent}.basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);border-radius:3px}.ant-pro-layout.dark .basic-layout-wrapper .ant-layout-sider-children,.ant-pro-layout.realdark .basic-layout-wrapper .ant-layout-sider-children,body.dark .basic-layout-wrapper .ant-layout-sider-children,body.realdark .basic-layout-wrapper .ant-layout-sider-children{scrollbar-color:hsla(0,0%,100%,.25) transparent}.ant-pro-layout.dark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb,.ant-pro-layout.realdark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb,body.dark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb,body.realdark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.25)}.basic-layout-wrapper .ant-pro-sider{height:100vh;-ms-flex-direction:column;flex-direction:column}.basic-layout-wrapper .ant-pro-sider,.basic-layout-wrapper .ant-pro-sider .ant-layout-sider-children{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal}.basic-layout-wrapper .ant-pro-sider .ant-layout-sider-children{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;-ms-flex-direction:column;flex-direction:column}.basic-layout-wrapper .ant-pro-sider .ant-menu,.basic-layout-wrapper .ant-pro-sider .ant-menu-root,.basic-layout-wrapper .ant-pro-sider .ant-pro-sider-menu{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;max-height:calc(100vh - var(--menu-footer-height, 220px) - 24px);overflow-y:auto!important;overflow-x:hidden;-webkit-overflow-scrolling:touch}.basic-layout-wrapper.dark .ant-layout-header,.basic-layout-wrapper.realdark .ant-layout-header{background:#111!important;border-bottom:1px solid #1c1c1c!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important}.basic-layout-wrapper.dark .ant-pro-global-header,.basic-layout-wrapper.realdark .ant-pro-global-header{background:#111!important;border-bottom:none!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;color:hsla(0,0%,100%,.85)!important}.basic-layout-wrapper.dark .ant-pro-global-header .ant-pro-global-header-trigger,.basic-layout-wrapper.realdark .ant-pro-global-header .ant-pro-global-header-trigger{color:hsla(0,0%,100%,.85)!important}.basic-layout-wrapper.dark .ant-pro-global-header .ant-pro-global-header-trigger:hover,.basic-layout-wrapper.realdark .ant-pro-global-header .ant-pro-global-header-trigger:hover{background:hsla(0,0%,100%,.06)!important}.basic-layout-wrapper.dark .ant-pro-global-header .action,.basic-layout-wrapper.realdark .ant-pro-global-header .action{color:hsla(0,0%,100%,.85)!important}.basic-layout-wrapper.dark .ant-pro-global-header .action:hover,.basic-layout-wrapper.realdark .ant-pro-global-header .action:hover{background:hsla(0,0%,100%,.06)!important}.basic-layout-wrapper.dark .ant-layout,.basic-layout-wrapper.dark .ant-pro-basicLayout-content,.basic-layout-wrapper.realdark .ant-layout,.basic-layout-wrapper.realdark .ant-pro-basicLayout-content{background-color:#141414!important}@media (max-width:768px){.ant-drawer.ant-drawer-open .ant-drawer-content-wrapper{overflow:visible}.ant-drawer.ant-drawer-open .ant-drawer-content,.ant-drawer.ant-drawer-open .ant-drawer-wrapper-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:visible}.ant-drawer.ant-drawer-open .ant-drawer-body{overflow-y:auto!important;overflow-x:hidden!important;padding-bottom:var(--footer-height,280px)!important;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:hsla(0,0%,100%,.2) transparent;min-height:0;-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar{width:4px}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar-track{background:transparent}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.2);border-radius:2px}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.3)}}.ant-pro-multi-tab{margin:-23px -24px 24px;background:#fff}.topmenu .ant-pro-multi-tab-wrapper{max-width:1200px;margin:0 auto}.topmenu.content-width-Fluid .ant-pro-multi-tab-wrapper{max-width:100%;margin:0 auto}body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-variant:tabular-nums;line-height:1.5;background-color:#fff;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix{zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s linear infinite;animation:loadingCircle 1s linear infinite}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}html{--antd-wave-shadow-color:#1890ff}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;-webkit-box-shadow:0 0 0 0 #1890ff;box-shadow:0 0 0 0 #1890ff;-webkit-box-shadow:0 0 0 0 var(--antd-wave-shadow-color);box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;-webkit-animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;content:"";pointer-events:none}@-webkit-keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@-webkit-keyframes fadeEffect{to{opacity:0}}@keyframes fadeEffect{to{opacity:0}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@-webkit-keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@-webkit-keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@-webkit-keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@-webkit-keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@-webkit-keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@-webkit-keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@-webkit-keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@-webkit-keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@-webkit-keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}@keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{-webkit-transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important;transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}#nprogress{pointer-events:none}#nprogress .bar{position:fixed;top:0;left:0;z-index:1031;width:100%;height:2px;background:#1890ff}#nprogress .peg{position:absolute;right:0;display:block;width:100px;height:100%;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px);-webkit-box-shadow:0 0 10px #1890ff,0 0 5px #1890ff;box-shadow:0 0 10px #1890ff,0 0 5px #1890ff}#nprogress .spinner{position:fixed;top:15px;right:15px;z-index:1031;display:block}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#1890ff;border-left-color:#1890ff;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{position:relative;overflow:hidden}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#app,#root,body,html{height:100%}.colorWeak{-webkit-filter:invert(80%);filter:invert(80%)}.ant-layout.layout-basic{height:100vh;min-height:100vh}canvas{display:block}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}ol,ul{list-style:none}.table-alert{margin-bottom:16px}.table-operator{margin-bottom:18px}.table-operator button{margin-right:8px}.table-page-search-wrapper .ant-form-inline .ant-form-item{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:0;margin-bottom:24px}.table-page-search-wrapper .ant-form-inline .ant-form-item .ant-form-item-control-wrapper{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;display:inline-block;vertical-align:middle}.table-page-search-wrapper .ant-form-inline .ant-form-item>.ant-form-item-label{width:auto;padding-right:8px;line-height:32px}.table-page-search-wrapper .ant-form-inline .ant-form-item .ant-form-item-control{height:32px;line-height:32px}.table-page-search-wrapper .table-page-search-submitButtons{display:block;margin-bottom:24px;white-space:nowrap}@media (max-width:480px){.ant-table{width:100%;overflow-x:auto}.ant-table-tbody>tr>td,.ant-table-tbody>tr>th,.ant-table-thead>tr>td,.ant-table-thead>tr>th{white-space:pre}.ant-table-tbody>tr>td>span,.ant-table-tbody>tr>th>span,.ant-table-thead>tr>td>span,.ant-table-thead>tr>th>span{display:block}}#webpack-dev-server-client-overlay,#webpack-hot-middleware-client-overlay,.webpack-dev-server-client-overlay{display:none!important;pointer-events:none!important;visibility:hidden!important}@media (max-width:768px){.ant-pro-global-header-logo{padding:0!important;padding-left:0!important;padding-right:0!important;padding-top:0!important;padding-bottom:0!important}}body.dark .ant-layout-sider,body.dark .ant-layout-sider-children,body.dark .ant-layout-sider-dark,body.dark .ant-menu-dark,body.dark .ant-menu-dark .ant-menu-inline.ant-menu-sub,body.dark .ant-menu.ant-menu-dark,body.dark .ant-pro-sider-menu-logo,body.dark .ant-pro-sider-menu-sider,body.dark .ant-pro-sider-menu-sider.ant-layout-sider-dark,body.dark aside.ant-layout-sider.ant-layout-sider-dark,body.dark ul.ant-menu.ant-menu-dark.ant-menu-root.ant-menu-inline,body.realdark .ant-layout-sider,body.realdark .ant-layout-sider-children,body.realdark .ant-layout-sider-dark,body.realdark .ant-menu-dark,body.realdark .ant-menu-dark .ant-menu-inline.ant-menu-sub,body.realdark .ant-menu.ant-menu-dark,body.realdark .ant-pro-sider-menu-logo,body.realdark .ant-pro-sider-menu-sider,body.realdark .ant-pro-sider-menu-sider.ant-layout-sider-dark,body.realdark aside.ant-layout-sider.ant-layout-sider-dark,body.realdark ul.ant-menu.ant-menu-dark.ant-menu-root.ant-menu-inline{background:#0a0a0a!important}body.dark .ant-menu-dark .ant-menu-sub,body.dark .ant-menu.ant-menu-dark .ant-menu-sub,body.realdark .ant-menu-dark .ant-menu-sub,body.realdark .ant-menu.ant-menu-dark .ant-menu-sub{background:#111!important}body.dark .ant-layout-sider-trigger,body.realdark .ant-layout-sider-trigger{border-top:1px solid #1c1c1c}body.dark .ant-layout-header,body.dark .ant-layout-sider-trigger,body.realdark .ant-layout-header,body.realdark .ant-layout-sider-trigger{background:#111!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important}body.dark .ant-layout-header,body.realdark .ant-layout-header{border-bottom:1px solid #1c1c1c!important}body.dark .ant-pro-global-header,body.realdark .ant-pro-global-header{background:#111!important;border-bottom:none!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.05)!important}body.dark .ant-layout,body.realdark .ant-layout{background:#0a0a0a!important}body.dark .ant-layout-content,body.dark .ant-pro-basicLayout-content,body.realdark .ant-layout-content,body.realdark .ant-pro-basicLayout-content{background:#141414!important}body.dark .ant-card,body.realdark .ant-card{background:#1c1c1c!important;border-color:#2a2a2a!important;color:hsla(0,0%,100%,.85)}body.dark .ant-card .ant-card-head,body.realdark .ant-card .ant-card-head{background:#1c1c1c!important;border-bottom-color:#2a2a2a!important;color:hsla(0,0%,100%,.85)!important}body.dark .ant-card .ant-card-body,body.realdark .ant-card .ant-card-body{color:hsla(0,0%,100%,.85)}body.dark .ant-table,body.realdark .ant-table{background:#1c1c1c!important;color:hsla(0,0%,100%,.85)}body.dark .ant-table .ant-table-thead>tr>th,body.realdark .ant-table .ant-table-thead>tr>th{background:#141414!important;border-bottom-color:#2a2a2a!important;color:hsla(0,0%,100%,.85)!important}body.dark .ant-table .ant-table-tbody>tr>td,body.realdark .ant-table .ant-table-tbody>tr>td{border-bottom-color:#2a2a2a!important;color:hsla(0,0%,100%,.85)}body.dark .ant-table .ant-table-tbody>tr:hover>td,body.realdark .ant-table .ant-table-tbody>tr:hover>td{background:#252525!important}body.dark .ant-table .ant-table-placeholder,body.realdark .ant-table .ant-table-placeholder{background:#1c1c1c!important;color:#666!important}body.dark .ant-pagination-item,body.realdark .ant-pagination-item{background:#1c1c1c!important;border-color:#2a2a2a!important}body.dark .ant-pagination-item a,body.realdark .ant-pagination-item a{color:hsla(0,0%,100%,.85)!important}body.dark .ant-pagination-item-active,body.realdark .ant-pagination-item-active{border-color:#1890ff!important}body.dark .ant-input,body.dark .ant-input-number,body.dark .ant-pagination-next .ant-pagination-item-link,body.dark .ant-pagination-prev .ant-pagination-item-link,body.dark .ant-select-selection,body.realdark .ant-input,body.realdark .ant-input-number,body.realdark .ant-pagination-next .ant-pagination-item-link,body.realdark .ant-pagination-prev .ant-pagination-item-link,body.realdark .ant-select-selection{background:#1c1c1c!important;border-color:#2a2a2a!important;color:hsla(0,0%,100%,.85)!important}body.dark .ant-input::-webkit-input-placeholder,body.realdark .ant-input::-webkit-input-placeholder{color:#555!important}body.dark .ant-input::-moz-placeholder,body.realdark .ant-input::-moz-placeholder{color:#555!important}body.dark .ant-input:-ms-input-placeholder,body.realdark .ant-input:-ms-input-placeholder{color:#555!important}body.dark .ant-input::-ms-input-placeholder,body.realdark .ant-input::-ms-input-placeholder{color:#555!important}body.dark .ant-input::placeholder,body.realdark .ant-input::placeholder{color:#555!important}body.dark .ant-form-item-label>label,body.realdark .ant-form-item-label>label{color:hsla(0,0%,100%,.85)!important}body.dark .ant-btn-default,body.realdark .ant-btn-default{background:#1c1c1c!important;border-color:#2a2a2a!important;color:hsla(0,0%,100%,.85)!important}body.dark .ant-btn-default:hover,body.realdark .ant-btn-default:hover{border-color:#1890ff!important;color:#1890ff!important}body.dark .ant-page-header,body.realdark .ant-page-header{background:transparent!important}body.dark .ant-breadcrumb-link,body.dark .ant-breadcrumb-separator,body.dark .ant-breadcrumb>span,body.realdark .ant-breadcrumb-link,body.realdark .ant-breadcrumb-separator,body.realdark .ant-breadcrumb>span{color:hsla(0,0%,100%,.45)!important}body.dark .ant-page-header-heading-title,body.realdark .ant-page-header-heading-title{color:hsla(0,0%,100%,.85)!important}body.dark .ant-tabs-bar,body.realdark .ant-tabs-bar{border-bottom-color:#2a2a2a!important}body.dark .ant-tabs-tab,body.realdark .ant-tabs-tab{color:#888!important}body.dark .ant-tabs-tab:hover,body.realdark .ant-tabs-tab:hover{color:#d4d4d4!important}body.dark .ant-tabs-tab-active,body.realdark .ant-tabs-tab-active{color:#1890ff!important}body.dark .ant-modal-content,body.realdark .ant-modal-content{background:#1c1c1c!important}body.dark .ant-modal-content .ant-modal-header,body.realdark .ant-modal-content .ant-modal-header{background:#1c1c1c!important;border-bottom-color:#2a2a2a!important}body.dark .ant-modal-content .ant-modal-body,body.dark .ant-modal-content .ant-modal-header .ant-modal-title,body.realdark .ant-modal-content .ant-modal-body,body.realdark .ant-modal-content .ant-modal-header .ant-modal-title{color:hsla(0,0%,100%,.85)!important}body.dark .ant-modal-content .ant-modal-footer,body.realdark .ant-modal-content .ant-modal-footer{border-top-color:#2a2a2a!important;background:#1c1c1c!important}body.dark .ant-modal-content .ant-modal-close-x,body.realdark .ant-modal-content .ant-modal-close-x{color:#888!important}body.dark .ant-select-dropdown,body.realdark .ant-select-dropdown{background:#1c1c1c!important}body.dark .ant-select-dropdown .ant-select-dropdown-menu-item,body.realdark .ant-select-dropdown .ant-select-dropdown-menu-item{color:hsla(0,0%,100%,.85)!important}body.dark .ant-select-dropdown .ant-select-dropdown-menu-item-active,body.dark .ant-select-dropdown .ant-select-dropdown-menu-item:hover,body.realdark .ant-select-dropdown .ant-select-dropdown-menu-item-active,body.realdark .ant-select-dropdown .ant-select-dropdown-menu-item:hover{background:#252525!important}body.dark .ant-select-dropdown .ant-select-dropdown-menu-item-selected,body.realdark .ant-select-dropdown .ant-select-dropdown-menu-item-selected{background:rgba(24,144,255,.1)!important;color:#1890ff!important}.basic-layout-wrapper.dark .ant-layout-header,.basic-layout-wrapper.realdark .ant-layout-header,body.dark .basic-layout-wrapper .ant-layout-header,body.realdark .basic-layout-wrapper .ant-layout-header{background:#111!important;background-color:#111!important;border-bottom:1px solid #1c1c1c!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.06)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.06)!important}.basic-layout-wrapper.dark .ant-pro-global-header,.basic-layout-wrapper.realdark .ant-pro-global-header,body.dark .basic-layout-wrapper .ant-pro-global-header,body.realdark .basic-layout-wrapper .ant-pro-global-header{background:#111!important;background-color:#111!important;border-bottom:none!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.06)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.06)!important}.basic-layout-wrapper.dark .ant-pro-basicLayout-content,.basic-layout-wrapper.dark .ant-pro-page-header-wrap,.basic-layout-wrapper.dark .ant-pro-page-header-wrap-children-content,.basic-layout-wrapper.realdark .ant-pro-basicLayout-content,.basic-layout-wrapper.realdark .ant-pro-page-header-wrap,.basic-layout-wrapper.realdark .ant-pro-page-header-wrap-children-content,body.dark .basic-layout-wrapper .ant-pro-page-header-wrap,body.dark .basic-layout-wrapper .ant-pro-page-header-wrap-children-content,body.realdark .basic-layout-wrapper .ant-pro-page-header-wrap,body.realdark .basic-layout-wrapper .ant-pro-page-header-wrap-children-content{background:#141414!important;background-color:#141414!important}.basic-layout-wrapper.dark .custom-menu-footer,.basic-layout-wrapper.realdark .custom-menu-footer,body.dark .basic-layout-wrapper .custom-menu-footer,body.realdark .basic-layout-wrapper .custom-menu-footer{background:#111!important;background-color:#111!important;border-top:1px solid #1c1c1c!important;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.06)!important;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.06)!important;color:hsla(0,0%,100%,.88)!important}.basic-layout-wrapper.dark .custom-menu-footer .menu-footer-content .footer-section,.basic-layout-wrapper.realdark .custom-menu-footer .menu-footer-content .footer-section{padding:4px 2px!important;margin-bottom:6px!important;border-radius:0!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important;opacity:1!important}.basic-layout-wrapper.dark .custom-menu-footer .menu-footer-content .footer-section:hover,.basic-layout-wrapper.realdark .custom-menu-footer .menu-footer-content .footer-section:hover{background:transparent!important}.basic-layout-wrapper.dark .custom-menu-footer .footer-section .section-title,.basic-layout-wrapper.realdark .custom-menu-footer .footer-section .section-title{color:hsla(0,0%,100%,.5)!important;opacity:1!important;text-transform:uppercase!important;letter-spacing:.5px!important;font-size:9px!important}.basic-layout-wrapper.dark .custom-menu-footer .footer-section .section-links,.basic-layout-wrapper.realdark .custom-menu-footer .footer-section .section-links{opacity:1!important}.basic-layout-wrapper.dark .custom-menu-footer .footer-section .section-links a,.basic-layout-wrapper.realdark .custom-menu-footer .footer-section .section-links a{color:hsla(0,0%,100%,.68)!important}.basic-layout-wrapper.dark .custom-menu-footer .footer-section.copyright,.basic-layout-wrapper.realdark .custom-menu-footer .footer-section.copyright{color:hsla(0,0%,100%,.45)!important;border-top-color:#1c1c1c!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}.basic-layout-wrapper.dark .custom-menu-footer .footer-section.version,.basic-layout-wrapper.realdark .custom-menu-footer .footer-section.version{color:hsla(0,0%,100%,.35)!important}.basic-layout-wrapper.dark .custom-menu-footer .social-icon,.basic-layout-wrapper.realdark .custom-menu-footer .social-icon{background:hsla(0,0%,100%,.08)!important;color:hsla(0,0%,100%,.75)!important}.basic-layout-wrapper.light .custom-menu-footer{background:#fff!important;background-color:#fff!important;border-top-color:#e8e8e8!important;-webkit-box-shadow:none!important;box-shadow:none!important;color:rgba(0,0,0,.85)!important}.basic-layout-wrapper.light .custom-menu-footer .footer-section .section-links{opacity:.75}body.dark .ant-modal-wrap [class*=billing],body.dark .ant-modal-wrap [class*=billing] .ant-steps-item-description,body.dark .ant-modal-wrap [class*=billing] .ant-steps-item-title,body.dark .ant-modal-wrap [class*=checkout],body.dark .ant-modal-wrap [class*=payment],body.dark .ant-modal-wrap [class*=payment] .ant-steps-item-description,body.dark .ant-modal-wrap [class*=payment] .ant-steps-item-title,body.dark .ant-modal-wrap [class*=recharge],body.dark .ant-modal-wrap [class*=usdt],body.dark .ant-modal-wrap [class*=usdt] .ant-steps-item-description,body.dark .ant-modal-wrap [class*=usdt] .ant-steps-item-title,body.realdark .ant-modal-wrap [class*=billing],body.realdark .ant-modal-wrap [class*=billing] .ant-steps-item-description,body.realdark .ant-modal-wrap [class*=billing] .ant-steps-item-title,body.realdark .ant-modal-wrap [class*=checkout],body.realdark .ant-modal-wrap [class*=payment],body.realdark .ant-modal-wrap [class*=payment] .ant-steps-item-description,body.realdark .ant-modal-wrap [class*=payment] .ant-steps-item-title,body.realdark .ant-modal-wrap [class*=recharge],body.realdark .ant-modal-wrap [class*=usdt],body.realdark .ant-modal-wrap [class*=usdt] .ant-steps-item-description,body.realdark .ant-modal-wrap [class*=usdt] .ant-steps-item-title{color:#d4d4d4!important}body.dark .ant-modal-wrap [class*=billing] .ant-descriptions-item-content,body.dark .ant-modal-wrap [class*=billing] .ant-statistic-content,body.dark .ant-modal-wrap [class*=payment] .ant-descriptions-item-content,body.dark .ant-modal-wrap [class*=payment] .ant-statistic-content,body.dark .ant-modal-wrap [class*=usdt] .ant-descriptions-item-content,body.dark .ant-modal-wrap [class*=usdt] .ant-statistic-content,body.realdark .ant-modal-wrap [class*=billing] .ant-descriptions-item-content,body.realdark .ant-modal-wrap [class*=billing] .ant-statistic-content,body.realdark .ant-modal-wrap [class*=payment] .ant-descriptions-item-content,body.realdark .ant-modal-wrap [class*=payment] .ant-statistic-content,body.realdark .ant-modal-wrap [class*=usdt] .ant-descriptions-item-content,body.realdark .ant-modal-wrap [class*=usdt] .ant-statistic-content{color:#e5e5e5!important} \ No newline at end of file diff --git a/frontend/dist/css/app.ee3dda40.css b/frontend/dist/css/app.ee3dda40.css deleted file mode 100644 index 88e14ac..0000000 --- a/frontend/dist/css/app.ee3dda40.css +++ /dev/null @@ -1 +0,0 @@ -.ant-pro-header-menu .anticon{margin-right:8px}.ant-pro-header-menu .ant-dropdown-menu-item{min-width:160px}.ant-pro-drop-down{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:64px;line-height:64px;padding:0 12px;vertical-align:top;cursor:pointer;-webkit-transition:all .3s;transition:all .3s}.ant-pro-drop-down:hover{background:rgba(0,0,0,.04)}.ant-pro-drop-down>i{font-size:16px!important;-webkit-transform:none!important;transform:none!important}.ant-pro-drop-down>i svg{position:relative;top:-1px}@media (max-width:768px){.ant-pro-drop-down{padding:0 8px}}#userLayout.user-layout-wrapper[data-v-7ae30672]{height:100%}#userLayout.user-layout-wrapper.mobile .container .main[data-v-7ae30672]{max-width:368px;width:98%}#userLayout.user-layout-wrapper .container[data-v-7ae30672]{width:100%;min-height:100%;background:#f0f2f5 url(/img/background.ed05d5bd.svg) no-repeat 50%;background-size:100%;position:relative}#userLayout.user-layout-wrapper .container .fx-layer[data-v-7ae30672]{position:absolute;inset:0;overflow:hidden;z-index:0;pointer-events:none}#userLayout.user-layout-wrapper .container .fx-layer .fx-gradient[data-v-7ae30672]{position:absolute;inset:-20% -20% -20% -20%;background:radial-gradient(1200px 600px at 10% 10%,rgba(78,161,255,.18),transparent 60%),radial-gradient(900px 500px at 90% 20%,rgba(127,92,255,.18),transparent 60%),radial-gradient(800px 500px at 30% 90%,rgba(0,210,170,.14),transparent 60%);-webkit-filter:blur(20px);filter:blur(20px);-webkit-animation:fxFloat-7ae30672 18s ease-in-out infinite alternate;animation:fxFloat-7ae30672 18s ease-in-out infinite alternate;-webkit-transform:translateZ(0);transform:translateZ(0)}#userLayout.user-layout-wrapper .container .fx-layer .fx-grid[data-v-7ae30672]{position:absolute;inset:0;background-image:linear-gradient(hsla(0,0%,100%,.06) 1px,transparent 0),linear-gradient(90deg,hsla(0,0%,100%,.06) 1px,transparent 0);background-size:44px 44px,44px 44px;background-position:0 0,0 0;mix-blend-mode:overlay;-webkit-animation:gridDrift-7ae30672 40s linear infinite;animation:gridDrift-7ae30672 40s linear infinite}#userLayout.user-layout-wrapper .container .user-layout-lang[data-v-7ae30672]{width:100%;height:40px;line-height:44px;text-align:right}#userLayout.user-layout-wrapper .container .user-layout-lang .select-lang-trigger[data-v-7ae30672]{cursor:pointer;padding:12px;margin-right:24px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:18px;vertical-align:middle}#userLayout.user-layout-wrapper .container .user-layout-content[data-v-7ae30672]{padding:32px 0 24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-height:calc(100vh - 40px);position:relative;z-index:1}#userLayout.user-layout-wrapper .container .user-layout-content .top[data-v-7ae30672]{text-align:center}#userLayout.user-layout-wrapper .container .user-layout-content .top .header[data-v-7ae30672]{height:56px;line-height:56px}#userLayout.user-layout-wrapper .container .user-layout-content .top .header .badge[data-v-7ae30672]{position:absolute;display:inline-block;line-height:1;vertical-align:middle;margin-left:-12px;margin-top:-10px;opacity:.8}#userLayout.user-layout-wrapper .container .user-layout-content .top .header .logo[data-v-7ae30672]{width:342px;max-width:42vw;height:auto;vertical-align:middle;margin-right:0;border-style:none}#userLayout.user-layout-wrapper .container .user-layout-content .top .header .title[data-v-7ae30672]{font-size:33px;color:rgba(0,0,0,.85);font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:600;position:relative;top:2px}#userLayout.user-layout-wrapper .container .user-layout-content .top .desc[data-v-7ae30672]{font-size:14px;color:rgba(0,0,0,.45);margin-top:12px;margin-bottom:40px}#userLayout.user-layout-wrapper .container .user-layout-content .main[data-v-7ae30672]{min-width:320px;width:480px;margin:0 auto}#userLayout.user-layout-wrapper .container .user-layout-content .main-content[data-v-7ae30672]{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#userLayout.user-layout-wrapper .container .user-layout-content .footer[data-v-7ae30672]{width:100%;padding:0 16px;margin-top:auto;margin-bottom:16px;text-align:center}#userLayout.user-layout-wrapper .container .user-layout-content .footer .links[data-v-7ae30672]{margin-bottom:8px;font-size:14px}#userLayout.user-layout-wrapper .container .user-layout-content .footer .links a[data-v-7ae30672]{color:rgba(0,0,0,.45);-webkit-transition:all .3s;transition:all .3s}#userLayout.user-layout-wrapper .container .user-layout-content .footer .links a[data-v-7ae30672]:not(:last-child){margin-right:40px}#userLayout.user-layout-wrapper .container .user-layout-content .footer .copyright[data-v-7ae30672]{color:rgba(0,0,0,.45);font-size:14px}#userLayout.user-layout-wrapper .container a[data-v-7ae30672]{text-decoration:none}@media (max-width:576px){#userLayout.user-layout-wrapper .container .user-layout-content .top .header .logo[data-v-7ae30672]{width:208px;max-width:70vw;margin-top:8px}#userLayout.user-layout-wrapper .container .user-layout-content .main[data-v-7ae30672]{width:92vw}}@-webkit-keyframes fxFloat-7ae30672{0%{-webkit-transform:translate3d(-2%,-1%,0) scale(1);transform:translate3d(-2%,-1%,0) scale(1)}50%{-webkit-transform:translate3d(1%,2%,0) scale(1.02);transform:translate3d(1%,2%,0) scale(1.02)}to{-webkit-transform:translate3d(3%,-2%,0) scale(1.04);transform:translate3d(3%,-2%,0) scale(1.04)}}@keyframes fxFloat-7ae30672{0%{-webkit-transform:translate3d(-2%,-1%,0) scale(1);transform:translate3d(-2%,-1%,0) scale(1)}50%{-webkit-transform:translate3d(1%,2%,0) scale(1.02);transform:translate3d(1%,2%,0) scale(1.02)}to{-webkit-transform:translate3d(3%,-2%,0) scale(1.04);transform:translate3d(3%,-2%,0) scale(1.04)}}@-webkit-keyframes gridDrift-7ae30672{0%{background-position:0 0,0 0;-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{background-position:22px 22px,22px 22px}to{background-position:44px 44px,44px 44px;-webkit-transform:rotate(3.6deg);transform:rotate(3.6deg)}}@keyframes gridDrift-7ae30672{0%{background-position:0 0,0 0;-webkit-transform:rotate(0deg);transform:rotate(0deg)}50%{background-position:22px 22px,22px 22px}to{background-position:44px 44px,44px 44px;-webkit-transform:rotate(3.6deg);transform:rotate(3.6deg)}}.ant-pro-drop-down .action{margin-right:8px}.ant-pro-drop-down .ant-dropdown-menu-item{min-width:160px}.ant-layout.dark .ant-dropdown-menu,.ant-layout.realdark .ant-dropdown-menu,.ant-pro-layout.dark .ant-dropdown-menu,.ant-pro-layout.realdark .ant-dropdown-menu,body.dark .ant-dropdown-menu,body.realdark .ant-dropdown-menu{background-color:#1f1f1f;border:1px solid #303030;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.3);box-shadow:0 4px 12px rgba(0,0,0,.3)}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item,body.dark .ant-dropdown-menu .ant-dropdown-menu-item,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item{color:hsla(0,0%,100%,.85)}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover,body.dark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,body.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-selected,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover{background-color:#262626;color:#1890ff}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,body.dark .ant-dropdown-menu .ant-dropdown-menu-item .anticon,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item .anticon{color:hsla(0,0%,100%,.85)}.ant-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider,body.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,body.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider{background-color:#303030}.notice-icon-wrapper[data-v-7e99442e]{display:inline-block;vertical-align:top}.header-notice[data-v-7e99442e]{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:64px;line-height:64px;-webkit-transition:all .3s;transition:all .3s;cursor:pointer;padding:0 12px;vertical-align:top}.header-notice[data-v-7e99442e]:hover{background:rgba(0,0,0,.04)}.header-notice span[data-v-7e99442e]{vertical-align:initial}@media (max-width:768px){.header-notice[data-v-7e99442e]{padding:0 8px}}.notice-header[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:12px 16px;border-bottom:1px solid #f0f0f0}.notice-header .notice-title[data-v-7e99442e]{font-weight:500;font-size:14px}.notice-header .notice-action[data-v-7e99442e]{font-size:12px;color:#1890ff;cursor:pointer}.notice-header .notice-action[data-v-7e99442e]:hover{color:#40a9ff}.notice-list[data-v-7e99442e]{max-height:400px;overflow-y:auto}.notice-item[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 16px;cursor:pointer;-webkit-transition:background .3s;transition:background .3s}.notice-item[data-v-7e99442e]:hover{background:#f5f5f5}.notice-item.unread[data-v-7e99442e]{background:#e6f7ff}.notice-item.unread[data-v-7e99442e]:hover{background:#bae7ff}.notice-item .notice-item-icon[data-v-7e99442e]{-ms-flex-negative:0;flex-shrink:0;width:32px;height:32px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:#f0f0f0;border-radius:50%;margin-right:12px;font-size:16px}.notice-item .notice-item-content[data-v-7e99442e]{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:0}.notice-item .notice-item-content .notice-item-title[data-v-7e99442e]{font-weight:500;font-size:13px;color:rgba(0,0,0,.85);margin-bottom:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.notice-item .notice-item-content .notice-item-desc[data-v-7e99442e]{font-size:12px;color:rgba(0,0,0,.45);line-height:1.5;margin-bottom:4px}.notice-item .notice-item-content .notice-item-time[data-v-7e99442e]{font-size:11px;color:rgba(0,0,0,.25)}.notice-empty[data-v-7e99442e]{padding:48px 0}.notice-footer[data-v-7e99442e]{text-align:center;padding:12px;border-top:1px solid #f0f0f0}.notice-footer a[data-v-7e99442e]{color:#1890ff;cursor:pointer}.notice-footer a[data-v-7e99442e]:hover{color:#40a9ff}.notice-detail .notice-detail-meta[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.notice-detail .notice-detail-meta .notice-detail-type[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px}.notice-detail .notice-detail-meta .notice-detail-type .type-label[data-v-7e99442e]{font-size:14px;color:rgba(0,0,0,.65)}.notice-detail .notice-detail-meta .notice-detail-time[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:6px;font-size:13px;color:rgba(0,0,0,.45)}.notice-detail .notice-detail-content .message-body[data-v-7e99442e]{font-size:14px;line-height:1.8;color:rgba(0,0,0,.85);max-height:300px;overflow-y:auto;padding:8px 0}.notice-detail .notice-detail-content .message-body h2[data-v-7e99442e],.notice-detail .notice-detail-content .message-body h3[data-v-7e99442e],.notice-detail .notice-detail-content .message-body h4[data-v-7e99442e]{margin:12px 0 8px;font-weight:600}.notice-detail .notice-detail-content .message-body h2[data-v-7e99442e]{font-size:18px}.notice-detail .notice-detail-content .message-body h3[data-v-7e99442e]{font-size:16px}.notice-detail .notice-detail-content .message-body h4[data-v-7e99442e]{font-size:14px}.notice-detail .notice-detail-content .message-body li[data-v-7e99442e]{margin-left:20px;list-style:disc}.notice-detail .notice-detail-content .message-body strong[data-v-7e99442e]{font-weight:600}.notice-detail .notice-detail-content.html-report .message-body[data-v-7e99442e]{max-height:70vh;padding:0;margin:-16px -24px;overflow-y:auto}.notice-detail .notice-detail-extra .extra-title[data-v-7e99442e]{font-weight:500;font-size:14px;margin-bottom:12px;color:rgba(0,0,0,.85)}.notice-detail .notice-detail-extra .extra-item[data-v-7e99442e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:8px;font-size:13px}.notice-detail .notice-detail-extra .extra-item .label[data-v-7e99442e]{-ms-flex-negative:0;flex-shrink:0;color:rgba(0,0,0,.45);margin-right:8px}.notice-detail .notice-detail-extra .extra-item .value[data-v-7e99442e]{color:rgba(0,0,0,.85);word-break:break-word}.notice-detail .notice-detail-extra .extra-item.decision[data-v-7e99442e]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.notice-detail .notice-detail-extra .extra-item.decision .confidence[data-v-7e99442e]{margin-left:8px;color:rgba(0,0,0,.45);font-size:12px}.notice-detail .notice-detail-actions[data-v-7e99442e]{margin-top:24px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:12px}.header-notice-wrapper{top:50px!important}.header-notice-wrapper .ant-popover-inner-content{padding:0}.notice-detail-modal .ant-modal-header{border-bottom:1px solid #f0f0f0}.notice-detail-modal .ant-modal-body{padding:16px 24px}.notice-detail-modal.html-report-modal .ant-modal-body{padding:0}.ant-layout.dark .header-notice-wrapper .ant-popover-inner,.ant-layout.realdark .header-notice-wrapper .ant-popover-inner,body.dark .header-notice-wrapper .ant-popover-inner,body.realdark .header-notice-wrapper .ant-popover-inner{background:#1f1f1f}.ant-layout.dark .header-notice-wrapper .ant-popover-arrow,.ant-layout.realdark .header-notice-wrapper .ant-popover-arrow,body.dark .header-notice-wrapper .ant-popover-arrow,body.realdark .header-notice-wrapper .ant-popover-arrow{border-color:#1f1f1f}.ant-layout.dark .header-notice-wrapper .notice-header,.ant-layout.realdark .header-notice-wrapper .notice-header,body.dark .header-notice-wrapper .notice-header,body.realdark .header-notice-wrapper .notice-header{border-color:#303030}.ant-layout.dark .header-notice-wrapper .notice-header .notice-title,.ant-layout.realdark .header-notice-wrapper .notice-header .notice-title,body.dark .header-notice-wrapper .notice-header .notice-title,body.realdark .header-notice-wrapper .notice-header .notice-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .header-notice-wrapper .notice-item:hover,.ant-layout.realdark .header-notice-wrapper .notice-item:hover,body.dark .header-notice-wrapper .notice-item:hover,body.realdark .header-notice-wrapper .notice-item:hover{background:#303030}.ant-layout.dark .header-notice-wrapper .notice-item.unread,.ant-layout.realdark .header-notice-wrapper .notice-item.unread,body.dark .header-notice-wrapper .notice-item.unread,body.realdark .header-notice-wrapper .notice-item.unread{background:rgba(24,144,255,.15)}.ant-layout.dark .header-notice-wrapper .notice-item.unread:hover,.ant-layout.realdark .header-notice-wrapper .notice-item.unread:hover,body.dark .header-notice-wrapper .notice-item.unread:hover,body.realdark .header-notice-wrapper .notice-item.unread:hover{background:rgba(24,144,255,.25)}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-icon,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-icon,body.dark .header-notice-wrapper .notice-item .notice-item-icon,body.realdark .header-notice-wrapper .notice-item .notice-item-icon{background:#303030}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title,body.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title,body.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc,body.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc,body.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-desc{color:hsla(0,0%,100%,.45)}.ant-layout.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time,.ant-layout.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time,body.dark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time,body.realdark .header-notice-wrapper .notice-item .notice-item-content .notice-item-time{color:hsla(0,0%,100%,.25)}.ant-layout.dark .header-notice-wrapper .notice-footer,.ant-layout.realdark .header-notice-wrapper .notice-footer,body.dark .header-notice-wrapper .notice-footer,body.realdark .header-notice-wrapper .notice-footer{border-color:#303030}.ant-layout.dark .header-notice-wrapper .ant-empty-description,.ant-layout.realdark .header-notice-wrapper .ant-empty-description,body.dark .header-notice-wrapper .ant-empty-description,body.realdark .header-notice-wrapper .ant-empty-description{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .ant-modal-content,.ant-layout.realdark .notice-detail-modal .ant-modal-content,body.dark .notice-detail-modal .ant-modal-content,body.realdark .notice-detail-modal .ant-modal-content{background:#1f1f1f}.ant-layout.dark .notice-detail-modal .ant-modal-header,.ant-layout.realdark .notice-detail-modal .ant-modal-header,body.dark .notice-detail-modal .ant-modal-header,body.realdark .notice-detail-modal .ant-modal-header{background:#1f1f1f;border-color:#303030}.ant-layout.dark .notice-detail-modal .ant-modal-header .ant-modal-title,.ant-layout.realdark .notice-detail-modal .ant-modal-header .ant-modal-title,body.dark .notice-detail-modal .ant-modal-header .ant-modal-title,body.realdark .notice-detail-modal .ant-modal-header .ant-modal-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .notice-detail-modal .ant-modal-close-x,.ant-layout.realdark .notice-detail-modal .ant-modal-close-x,body.dark .notice-detail-modal .ant-modal-close-x,body.realdark .notice-detail-modal .ant-modal-close-x{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .ant-divider,.ant-layout.realdark .notice-detail-modal .ant-divider,body.dark .notice-detail-modal .ant-divider,body.realdark .notice-detail-modal .ant-divider{border-color:#303030}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label,body.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label,body.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-type .type-label{color:hsla(0,0%,100%,.65)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time,body.dark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time,body.realdark .notice-detail-modal .notice-detail .notice-detail-meta .notice-detail-time{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-content .message-body,.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-content .message-body,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title,body.dark .notice-detail-modal .notice-detail .notice-detail-content .message-body,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title,body.realdark .notice-detail-modal .notice-detail .notice-detail-content .message-body,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-title{color:hsla(0,0%,100%,.85)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .label{color:hsla(0,0%,100%,.45)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .value{color:hsla(0,0%,100%,.85)}.ant-layout.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence,.ant-layout.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence,body.dark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence,body.realdark .notice-detail-modal .notice-detail .notice-detail-extra .extra-item .confidence{color:hsla(0,0%,100%,.45)}.ant-pro-global-header-index-right{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-negative:0;flex-shrink:0}.ant-pro-global-header-index-right .ant-pro-global-header-index-action{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:64px;padding:0 12px;color:rgba(0,0,0,.65);-webkit-transition:all .3s;transition:all .3s;cursor:pointer;vertical-align:top}.ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover{color:#1890ff;background:rgba(0,0,0,.04)}@media (max-width:768px){.ant-pro-global-header-index-right .ant-pro-account-avatar,.ant-pro-global-header-index-right .ant-pro-drop-down,.ant-pro-global-header-index-right .ant-pro-global-header-index-action{padding:0 8px}}.ant-layout.dark .ant-pro-global-header-index-right,.ant-layout.dark .ant-pro-global-header-index-right *,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,.ant-layout.realdark .ant-pro-global-header-index-right,.ant-layout.realdark .ant-pro-global-header-index-right *,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,.ant-pro-layout.dark .ant-pro-global-header-index-right,.ant-pro-layout.dark .ant-pro-global-header-index-right *,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,.ant-pro-layout.realdark .ant-pro-global-header-index-right,.ant-pro-layout.realdark .ant-pro-global-header-index-right *,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,body.dark .ant-pro-global-header-index-right,body.dark .ant-pro-global-header-index-right *,body.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action,body.realdark .ant-pro-global-header-index-right,body.realdark .ant-pro-global-header-index-right *,body.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action{color:hsla(0,0%,100%,.85)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,body.dark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover,body.realdark .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,body.dark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar,body.realdark .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{background:hsla(0,0%,100%,.25)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down,.ant-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down,body.dark .ant-pro-global-header-index-right .ant-dropdown-trigger,body.dark .ant-pro-global-header-index-right .ant-pro-drop-down,body.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger,body.realdark .ant-pro-global-header-index-right .ant-pro-drop-down{color:hsla(0,0%,100%,.85)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,.ant-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,body.dark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,body.dark .ant-pro-global-header-index-right .ant-pro-drop-down:hover,body.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,body.realdark .ant-pro-global-header-index-right .ant-pro-drop-down:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}.ant-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,.ant-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-pro-layout.dark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,.ant-pro-layout.realdark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,body.dark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,body.dark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon,body.realdark .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,body.realdark .ant-pro-global-header-index-right .ant-pro-drop-down .anticon{color:hsla(0,0%,100%,.85)!important}.setting-drawer-index-item[data-v-e773bc98]{margin-bottom:24px}.setting-drawer-index-item .setting-drawer-index-title[data-v-e773bc98]{font-size:14px;color:rgba(0,0,0,.85);line-height:22px;margin-bottom:12px}[data-v-940007f2] .ant-drawer-handle,[data-v-940007f2] .setting-drawer-index-handle{display:none!important}.setting-drawer-index-content .setting-drawer-index-blockChecbox[data-v-940007f2]{display:-webkit-box;display:-ms-flexbox;display:flex}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item[data-v-940007f2]{margin-right:16px;position:relative;border-radius:4px;cursor:pointer}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item img[data-v-940007f2]{width:48px}.setting-drawer-index-content .setting-drawer-index-blockChecbox .setting-drawer-index-item .setting-drawer-index-selectIcon[data-v-940007f2]{position:absolute;top:0;right:0;width:100%;padding-top:15px;padding-left:24px;height:100%;color:#1890ff;font-size:14px;font-weight:700}.setting-drawer-index-content .setting-drawer-theme-color-colorBlock[data-v-940007f2]{width:20px;height:20px;border-radius:2px;float:left;cursor:pointer;margin-right:8px;padding-left:0;padding-right:0;text-align:center;color:#fff;font-weight:700}.setting-drawer-index-content .setting-drawer-theme-color-colorBlock i[data-v-940007f2]{font-size:14px}:global .ant-layout .ant-layout-footer,:global .ant-layout-footer,:global .ant-pro-layout .ant-layout-footer,:global footer.ant-layout-footer{display:none!important;height:0!important;padding:0!important;margin:0!important;border:none!important;min-height:0!important;visibility:hidden!important;overflow:hidden!important}:global .ant-layout.dark .ant-layout-header,:global .ant-layout.realdark .ant-layout-header,:global .ant-pro-layout.dark .ant-layout-header,:global .ant-pro-layout.realdark .ant-layout-header,:global body.dark .ant-layout-header,:global body.realdark .ant-layout-header{background:#001529!important;border-bottom:1px solid #1f1f1f!important;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08)!important;box-shadow:0 1px 4px rgba(0,21,41,.08)!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header *,:global .ant-layout.realdark .ant-layout-header *,:global .ant-pro-layout.dark .ant-layout-header *,:global .ant-pro-layout.realdark .ant-layout-header *,:global body.dark .ant-layout-header *,:global body.realdark .ant-layout-header *{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header .anticon,:global .ant-layout.realdark .ant-layout-header .anticon,:global .ant-pro-layout.dark .ant-layout-header .anticon,:global .ant-pro-layout.realdark .ant-layout-header .anticon,:global body.dark .ant-layout-header .anticon,:global body.realdark .ant-layout-header .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header .anticon:hover,:global .ant-layout.realdark .ant-layout-header .anticon:hover,:global .ant-pro-layout.dark .ant-layout-header .anticon:hover,:global .ant-pro-layout.realdark .ant-layout-header .anticon:hover,:global body.dark .ant-layout-header .anticon:hover,:global body.realdark .ant-layout-header .anticon:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important;border-radius:4px}:global .ant-layout.dark .ant-layout-header a,:global .ant-layout.realdark .ant-layout-header a,:global .ant-pro-layout.dark .ant-layout-header a,:global .ant-pro-layout.realdark .ant-layout-header a,:global body.dark .ant-layout-header a,:global body.realdark .ant-layout-header a{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-layout-header a:hover,:global .ant-layout.realdark .ant-layout-header a:hover,:global .ant-pro-layout.dark .ant-layout-header a:hover,:global .ant-pro-layout.realdark .ant-layout-header a:hover,:global body.dark .ant-layout-header a:hover,:global body.realdark .ant-layout-header a:hover{color:#1890ff!important}:global .ant-layout.dark .ant-layout-header .ant-tooltip-open .anticon,:global .ant-layout.realdark .ant-layout-header .ant-tooltip-open .anticon,:global .ant-pro-layout.dark .ant-layout-header .ant-tooltip-open .anticon,:global .ant-pro-layout.realdark .ant-layout-header .ant-tooltip-open .anticon,:global body.dark .ant-layout-header .ant-tooltip-open .anticon,:global body.realdark .ant-layout-header .ant-tooltip-open .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.light .ant-layout-header,:global .ant-pro-layout.light .ant-layout-header,:global body.light .ant-layout-header{background:#fff!important;border-bottom:1px solid #e8e8e8!important;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08)!important;box-shadow:0 1px 4px rgba(0,21,41,.08)!important;color:rgba(0,0,0,.85)!important}:global .ant-layout.dark .ant-layout-content,:global .ant-layout.realdark .ant-layout-content,:global .ant-pro-layout.dark .ant-layout-content,:global .ant-pro-layout.realdark .ant-layout-content,:global body.dark .ant-layout-content,:global body.realdark .ant-layout-content{background:#141414!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.light .ant-layout-content,:global .ant-pro-layout.light .ant-layout-content,:global body.light .ant-layout-content{background:#f0f2f5!important;color:rgba(0,0,0,.85)!important}:global .ant-layout.dark .ant-pro-global-header,:global .ant-layout.realdark .ant-pro-global-header,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header,:global .ant-pro-layout.dark .ant-pro-global-header,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header,:global .ant-pro-layout.realdark .ant-pro-global-header,:global body.dark .ant-layout-header .ant-pro-global-header,:global body.dark .ant-pro-global-header,:global body.realdark .ant-layout-header .ant-pro-global-header,:global body.realdark .ant-pro-global-header{background:#001529!important;border-bottom:1px solid #1f1f1f!important;-webkit-box-shadow:0 1px 4px rgba(0,21,41,.08)!important;box-shadow:0 1px 4px rgba(0,21,41,.08)!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header *,:global .ant-layout.realdark .ant-pro-global-header *,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header *,:global .ant-pro-layout.dark .ant-pro-global-header *,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header *,:global .ant-pro-layout.realdark .ant-pro-global-header *,:global body.dark .ant-layout-header .ant-pro-global-header *,:global body.dark .ant-pro-global-header *,:global body.realdark .ant-layout-header .ant-pro-global-header *,:global body.realdark .ant-pro-global-header *{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo{background:transparent!important;color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo h1,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo h1{color:hsla(0,0%,100%,.85)!important}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo img,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo img,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo img,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo img{opacity:.9}:global .ant-layout.dark .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.dark .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global .ant-pro-layout.realdark .ant-pro-global-header .ant-pro-global-header-logo *,:global body.dark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global body.dark .ant-pro-global-header .ant-pro-global-header-logo *,:global body.realdark .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo *,:global body.realdark .ant-pro-global-header .ant-pro-global-header-logo *{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content{background:transparent!important;color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content *{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-content .anticon:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important;border-radius:4px}:global .ant-pro-global-header-content .ant-tooltip-open .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right{background:transparent!important;color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right *{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-global-header-index-action{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-global-header-index-action:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}:global .ant-pro-global-header-index-right .ant-pro-global-header-index-action .anticon{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-account-avatar{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-account-avatar span{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{background:hsla(0,0%,100%,.25)!important}:global .ant-pro-global-header-index-right .ant-dropdown-trigger,:global .ant-pro-global-header-index-right .ant-pro-drop-down{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,:global .ant-pro-global-header-index-right .ant-pro-drop-down:hover{color:#1890ff!important;background:hsla(0,0%,100%,.08)!important}:global .ant-pro-global-header-index-right .ant-dropdown-trigger .anticon,:global .ant-pro-global-header-index-right .ant-pro-drop-down .anticon{color:hsla(0,0%,100%,.85)!important}:global a{color:hsla(0,0%,100%,.85)!important}:global a:hover{color:#1890ff!important}:global .anticon{color:hsla(0,0%,100%,.85)!important}:global .anticon:hover{color:#1890ff!important}:global .ant-layout.light .ant-pro-global-header,:global .ant-pro-layout.light .ant-layout-header .ant-pro-global-header,:global .ant-pro-layout.light .ant-pro-global-header,:global body.light .ant-layout-header .ant-pro-global-header,:global body.light .ant-pro-global-header{background:#fff!important;border-bottom:1px solid #e8e8e8!important;color:rgba(0,0,0,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout),:global(.ant-pro-layout).realdark :global(.ant-layout){background-color:#001529!important}:global(.ant-pro-layout).dark :global(.ant-layout-header),:global(.ant-pro-layout).realdark :global(.ant-layout-header){background:#001529!important;border-bottom:1px solid #1f1f1f!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-header) :global(.ant-pro-global-header),:global(.ant-pro-layout).realdark :global(.ant-layout-header) :global(.ant-pro-global-header){background:#001529!important;border-bottom:none!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-header) :global(.ant-pro-global-header) *,:global(.ant-pro-layout).realdark :global(.ant-layout-header) :global(.ant-pro-global-header) *{color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-layout-content),:global(.ant-pro-layout).realdark :global(.ant-layout-content){background:#141414!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).dark :global(.ant-pro-basicLayout-content),:global(.ant-pro-layout).realdark :global(.ant-pro-basicLayout-content){background:#141414!important;color:hsla(0,0%,100%,.85)!important}:global(.ant-pro-layout).light :global(.ant-layout){background-color:#f0f2f5!important}:global(.ant-pro-layout).light :global(.ant-layout-header){background:#fff!important;border-bottom:1px solid #e8e8e8!important;color:rgba(0,0,0,.85)!important}:global(.ant-pro-layout).light :global(.ant-layout-content){background:#f0f2f5!important;color:rgba(0,0,0,.85)!important}:global(.ant-pro-layout).light :global(.ant-pro-basicLayout-content){background:#f0f2f5!important;color:rgba(0,0,0,.85)!important}.ant-pro-global-header-index-right{margin-right:8px}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-global-header-index-action{color:#030303}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-global-header-index-action:hover{background:#1890ff}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-account-avatar{color:hsla(0,0%,100%,.85)}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-account-avatar .antd-pro-global-header-index-avatar{background:hsla(0,0%,100%,.25)!important}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-account-avatar span,.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-drop-down{color:hsla(0,0%,100%,.85)}.ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-drop-down:hover{color:#1890ff;background:hsla(0,0%,100%,.08)}.ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{margin:20px 0;margin-right:8px;color:#1890ff;vertical-align:top;background:rgb(255 255 3%)}.ant-pro-global-header-index-right .menu .anticon{margin-right:8px}.ant-pro-global-header-index-right .menu .ant-dropdown-menu-item{min-width:100px}:global .ant-pro-layout.dark .ant-dropdown-menu,:global .ant-pro-layout.realdark .ant-dropdown-menu{background:#1f1f1f!important;border:1px solid #303030!important;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.3)!important;box-shadow:0 4px 12px rgba(0,0,0,.3)!important}:global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item{color:hsla(0,0%,100%,.85)!important}:global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover{background:#262626!important;color:#1890ff!important}:global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item-divider,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item-divider{background:#303030!important}@media (max-width:768px){:global .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global .ant-pro-global-header-logo,:global .ant-pro-layout .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo,:global body .ant-layout-header .ant-pro-global-header .ant-pro-global-header-logo{padding:0!important;padding-left:0!important;padding-right:0!important;padding-top:0!important;padding-bottom:0!important}}.ant-pro-sider-menu-sider.light .ant-menu-light{height:60vh!important}.basic-layout-wrapper .ant-layout-footer{display:none!important;height:0!important;padding:0!important;margin:0!important;border:none!important}.basic-layout-wrapper{position:relative}.basic-layout-wrapper .custom-menu-footer{position:fixed;bottom:0;left:0;z-index:100;width:256px;background:#001529;border-top:1px solid hsla(0,0%,100%,.1);-webkit-transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86);transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86);max-width:256px;display:block;opacity:1}.basic-layout-wrapper .custom-menu-footer.collapsed{width:80px;max-width:80px}@media (max-width:768px){.basic-layout-wrapper .custom-menu-footer{z-index:1001}.basic-layout-wrapper .custom-menu-footer:not(.drawer-open){display:none!important;opacity:0}.basic-layout-wrapper .custom-menu-footer.drawer-animating{opacity:0;-webkit-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.basic-layout-wrapper .custom-menu-footer.drawer-open:not(.drawer-animating){opacity:1;-webkit-transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86) .1s;transition:left .3s cubic-bezier(.78,.14,.15,.86),width .3s cubic-bezier(.78,.14,.15,.86),max-width .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86) .1s}}.ant-pro-layout.light .basic-layout-wrapper .custom-menu-footer,body.light .basic-layout-wrapper .custom-menu-footer{background:#fff;border-top-color:#e8e8e8;color:rgba(0,0,0,.85)}.ant-pro-layout.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a,body.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a{color:rgba(0,0,0,.65)}.ant-pro-layout.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon,body.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon{background:rgba(0,0,0,.05);color:rgba(0,0,0,.65)}.ant-pro-layout.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon:hover,body.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon:hover{background:rgba(0,0,0,.1);color:rgba(0,0,0,.85)}.ant-pro-layout.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon .social-icon-svg,body.light .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon .social-icon-svg{color:currentColor}.ant-pro-layout.dark .basic-layout-wrapper .custom-menu-footer,.ant-pro-layout.realdark .basic-layout-wrapper .custom-menu-footer,body.dark .basic-layout-wrapper .custom-menu-footer,body.realdark .basic-layout-wrapper .custom-menu-footer{background:#001529;border-top-color:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.65)}.ant-pro-layout.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a,.ant-pro-layout.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a,body.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a,body.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a{color:hsla(0,0%,100%,.65)}.ant-pro-layout.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon,.ant-pro-layout.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon,body.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon,body.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon{background:hsla(0,0%,100%,.05);color:hsla(0,0%,100%,.65)}.ant-pro-layout.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon:hover,.ant-pro-layout.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon:hover,body.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon:hover,body.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon:hover{background:hsla(0,0%,100%,.1);color:hsla(0,0%,100%,.85)}.ant-pro-layout.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon .social-icon-svg,.ant-pro-layout.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon .social-icon-svg,body.dark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon .social-icon-svg,body.realdark .basic-layout-wrapper .custom-menu-footer .menu-footer-content .social-icon .social-icon-svg{color:currentColor}.basic-layout-wrapper .custom-menu-footer .menu-footer-content{padding:12px 16px;font-size:11px;color:inherit;max-height:30vh;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:hsla(0,0%,100%,.2) transparent}.basic-layout-wrapper .custom-menu-footer .menu-footer-content::-webkit-scrollbar{width:4px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content::-webkit-scrollbar-track{background:transparent}.basic-layout-wrapper .custom-menu-footer .menu-footer-content::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.2);border-radius:2px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section{margin-bottom:12px;text-align:center}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section:last-child{margin-bottom:0}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-title{font-size:11px;font-weight:500;margin-bottom:6px;opacity:.8;color:inherit}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:4px;-ms-flex-wrap:wrap;flex-wrap:wrap;font-size:10px;opacity:.7}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a{cursor:pointer;color:inherit;text-decoration:underline;-webkit-transition:opacity .2s;transition:opacity .2s}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links a:hover{opacity:1}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .section-links .separator{opacity:.5;margin:0 2px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;gap:8px;margin-top:6px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon{width:15px;height:15px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:4px;cursor:pointer;opacity:.7;-webkit-transition:all .2s;transition:all .2s;background:hsla(0,0%,100%,.05);text-decoration:none;overflow:hidden}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon:hover{opacity:1;background:hsla(0,0%,100%,.1);-webkit-transform:translateY(-2px);transform:translateY(-2px)}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .social-icon-svg{width:15x;height:15px;color:currentColor}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .anticon{font-size:16px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .social-logo{width:15px;height:15px;-o-object-fit:contain;object-fit:contain}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section .social-icons .social-icon .social-icon-text{font-size:10px;font-weight:700}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section.copyright{margin-top:12px;padding-top:12px;border-top:1px solid hsla(0,0%,100%,.1);opacity:.6;font-size:10px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content .footer-section.version{margin-top:4px;font-size:9px;opacity:.4;text-align:center;letter-spacing:1px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content-collapsed{text-align:center;padding:16px;font-size:12px;opacity:.6;cursor:pointer;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.basic-layout-wrapper .custom-menu-footer .menu-footer-content-collapsed .anticon{font-size:16px}.basic-layout-wrapper .custom-menu-footer .menu-footer-content-collapsed:hover{opacity:1}.basic-layout-wrapper ::v-deep .ant-pro-layout .ant-pro-sider-collapsed~.custom-menu-footer,.basic-layout-wrapper ::v-deep .ant-pro-layout.ant-pro-sider-collapsed~.custom-menu-footer{width:80px}.basic-layout-wrapper .ant-layout-sider-children{padding-bottom:calc(var(--menu-footer-height, 220px) + 12px);overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.15) transparent}.basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar{width:6px}.basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-track{background:transparent}.basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb{background:rgba(0,0,0,.15);border-radius:3px}.ant-pro-layout.dark .basic-layout-wrapper .ant-layout-sider-children,.ant-pro-layout.realdark .basic-layout-wrapper .ant-layout-sider-children,body.dark .basic-layout-wrapper .ant-layout-sider-children,body.realdark .basic-layout-wrapper .ant-layout-sider-children{scrollbar-color:hsla(0,0%,100%,.25) transparent}.ant-pro-layout.dark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb,.ant-pro-layout.realdark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb,body.dark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb,body.realdark .basic-layout-wrapper .ant-layout-sider-children::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.25)}.basic-layout-wrapper .ant-pro-sider{height:100vh;-ms-flex-direction:column;flex-direction:column}.basic-layout-wrapper .ant-pro-sider,.basic-layout-wrapper .ant-pro-sider .ant-layout-sider-children{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal}.basic-layout-wrapper .ant-pro-sider .ant-layout-sider-children{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;-ms-flex-direction:column;flex-direction:column}.basic-layout-wrapper .ant-pro-sider .ant-menu,.basic-layout-wrapper .ant-pro-sider .ant-menu-root,.basic-layout-wrapper .ant-pro-sider .ant-pro-sider-menu{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:0;max-height:calc(100vh - var(--menu-footer-height, 220px) - 24px);overflow-y:auto!important;overflow-x:hidden;-webkit-overflow-scrolling:touch}.basic-layout-wrapper.dark .ant-pro-global-header,.basic-layout-wrapper.realdark .ant-pro-global-header{background:#001529!important;color:hsla(0,0%,100%,.85)!important}.basic-layout-wrapper.dark .ant-pro-global-header .ant-pro-global-header-trigger,.basic-layout-wrapper.realdark .ant-pro-global-header .ant-pro-global-header-trigger{color:hsla(0,0%,100%,.85)!important}.basic-layout-wrapper.dark .ant-pro-global-header .ant-pro-global-header-trigger:hover,.basic-layout-wrapper.realdark .ant-pro-global-header .ant-pro-global-header-trigger:hover{background:hsla(0,0%,100%,.03)!important}.basic-layout-wrapper.dark .ant-pro-global-header .action,.basic-layout-wrapper.realdark .ant-pro-global-header .action{color:hsla(0,0%,100%,.85)!important}.basic-layout-wrapper.dark .ant-pro-global-header .action:hover,.basic-layout-wrapper.realdark .ant-pro-global-header .action:hover{background:hsla(0,0%,100%,.03)!important}.basic-layout-wrapper.dark .ant-layout,.basic-layout-wrapper.dark .ant-pro-basicLayout-content,.basic-layout-wrapper.realdark .ant-layout,.basic-layout-wrapper.realdark .ant-pro-basicLayout-content{background-color:#141414!important}@media (max-width:768px){.ant-drawer.ant-drawer-open .ant-drawer-content-wrapper{overflow:visible}.ant-drawer.ant-drawer-open .ant-drawer-content,.ant-drawer.ant-drawer-open .ant-drawer-wrapper-body{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:visible}.ant-drawer.ant-drawer-open .ant-drawer-body{overflow-y:auto!important;overflow-x:hidden!important;padding-bottom:var(--footer-height,280px)!important;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:hsla(0,0%,100%,.2) transparent;min-height:0;-webkit-box-flex:1;-ms-flex:1;flex:1}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar{width:4px}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar-track{background:transparent}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.2);border-radius:2px}.ant-drawer.ant-drawer-open .ant-drawer-body::-webkit-scrollbar-thumb:hover{background:hsla(0,0%,100%,.3)}}.ant-pro-multi-tab{margin:-23px -24px 24px;background:#fff}.topmenu .ant-pro-multi-tab-wrapper{max-width:1200px;margin:0 auto}.topmenu.content-width-Fluid .ant-pro-multi-tab-wrapper{max-width:100%;margin:0 auto}body,html{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-variant:tabular-nums;line-height:1.5;background-color:#fff;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:rgba(0,0,0,.85);font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=number],input[type=password],input[type=text],textarea{-webkit-appearance:none}dl,ol,ul{margin-top:0;margin-bottom:1em}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a[disabled]{color:rgba(0,0,0,.25);cursor:not-allowed;pointer-events:none}code,kbd,pre,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}[role=button],a,area,button,input:not([type=range]),label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:rgba(0,0,0,.45);text-align:left;caption-side:bottom}th{text-align:inherit}button,input,optgroup,select,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix{zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon[tabindex]{cursor:pointer}.anticon-spin,.anticon-spin:before{display:inline-block;-webkit-animation:loadingCircle 1s linear infinite;animation:loadingCircle 1s linear infinite}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.fade-appear.fade-appear-active,.fade-enter.fade-enter-active{-webkit-animation-name:antFadeIn;animation-name:antFadeIn;-webkit-animation-play-state:running;animation-play-state:running}.fade-leave.fade-leave-active{-webkit-animation-name:antFadeOut;animation-name:antFadeOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.fade-appear,.fade-enter{opacity:0}.fade-appear,.fade-enter,.fade-leave{-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@-webkit-keyframes antFadeOut{0%{opacity:1}to{opacity:0}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.move-up-appear,.move-up-enter,.move-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-up-appear.move-up-appear-active,.move-up-enter.move-up-enter-active{-webkit-animation-name:antMoveUpIn;animation-name:antMoveUpIn;-webkit-animation-play-state:running;animation-play-state:running}.move-up-leave.move-up-leave-active{-webkit-animation-name:antMoveUpOut;animation-name:antMoveUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-up-appear,.move-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-appear,.move-down-enter,.move-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-down-appear.move-down-appear-active,.move-down-enter.move-down-enter-active{-webkit-animation-name:antMoveDownIn;animation-name:antMoveDownIn;-webkit-animation-play-state:running;animation-play-state:running}.move-down-leave.move-down-leave-active{-webkit-animation-name:antMoveDownOut;animation-name:antMoveDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-down-appear,.move-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-appear,.move-left-enter,.move-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-left-appear.move-left-appear-active,.move-left-enter.move-left-enter-active{-webkit-animation-name:antMoveLeftIn;animation-name:antMoveLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.move-left-leave.move-left-leave-active{-webkit-animation-name:antMoveLeftOut;animation-name:antMoveLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-left-appear,.move-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-appear,.move-right-enter,.move-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.move-right-appear.move-right-appear-active,.move-right-enter.move-right-enter-active{-webkit-animation-name:antMoveRightIn;animation-name:antMoveRightIn;-webkit-animation-play-state:running;animation-play-state:running}.move-right-leave.move-right-leave-active{-webkit-animation-name:antMoveRightOut;animation-name:antMoveRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.move-right-appear,.move-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{-webkit-animation-timing-function:cubic-bezier(.6,.04,.98,.34);animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@-webkit-keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveDownIn{0%{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveDownOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveLeftIn{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveLeftOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveRightIn{0%{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveRightOut{0%{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antMoveUpIn{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antMoveUpOut{0%{-webkit-transform:translateY(0);transform:translateY(0);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:translateY(-100%);transform:translateY(-100%);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loadingCircle{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}[ant-click-animating-without-extra-node=true],[ant-click-animating=true]{position:relative}html{--antd-wave-shadow-color:#1890ff}.ant-click-animating-node,[ant-click-animating-without-extra-node=true]:after{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;-webkit-box-shadow:0 0 0 0 #1890ff;box-shadow:0 0 0 0 #1890ff;-webkit-box-shadow:0 0 0 0 var(--antd-wave-shadow-color);box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;-webkit-animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;content:"";pointer-events:none}@-webkit-keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes waveEffect{to{-webkit-box-shadow:0 0 0 #1890ff;box-shadow:0 0 0 #1890ff;-webkit-box-shadow:0 0 0 6px var(--antd-wave-shadow-color);box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@-webkit-keyframes fadeEffect{to{opacity:0}}@keyframes fadeEffect{to{opacity:0}}.slide-up-appear,.slide-up-enter,.slide-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-up-appear.slide-up-appear-active,.slide-up-enter.slide-up-enter-active{-webkit-animation-name:antSlideUpIn;animation-name:antSlideUpIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-up-leave.slide-up-leave-active{-webkit-animation-name:antSlideUpOut;animation-name:antSlideUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-up-appear,.slide-up-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-appear,.slide-down-enter,.slide-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-down-appear.slide-down-appear-active,.slide-down-enter.slide-down-enter-active{-webkit-animation-name:antSlideDownIn;animation-name:antSlideDownIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-down-leave.slide-down-leave-active{-webkit-animation-name:antSlideDownOut;animation-name:antSlideDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-down-appear,.slide-down-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-appear,.slide-left-enter,.slide-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-left-appear.slide-left-appear-active,.slide-left-enter.slide-left-enter-active{-webkit-animation-name:antSlideLeftIn;animation-name:antSlideLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-left-leave.slide-left-leave-active{-webkit-animation-name:antSlideLeftOut;animation-name:antSlideLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-left-appear,.slide-left-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-appear,.slide-right-enter,.slide-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.slide-right-appear.slide-right-appear-active,.slide-right-enter.slide-right-enter-active{-webkit-animation-name:antSlideRightIn;animation-name:antSlideRightIn;-webkit-animation-play-state:running;animation-play-state:running}.slide-right-leave.slide-right-leave-active{-webkit-animation-name:antSlideRightOut;animation-name:antSlideRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.slide-right-appear,.slide-right-enter{opacity:0;-webkit-animation-timing-function:cubic-bezier(.23,1,.32,1);animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@-webkit-keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideUpIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideUpOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownIn{0%{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}to{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}}@-webkit-keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@keyframes antSlideDownOut{0%{-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:1}to{-webkit-transform:scaleY(.8);transform:scaleY(.8);-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:0}}@-webkit-keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@keyframes antSlideLeftIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}}@-webkit-keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@keyframes antSlideLeftOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:0 0;transform-origin:0 0;opacity:0}}@-webkit-keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@keyframes antSlideRightIn{0%{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}to{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}}@-webkit-keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}@keyframes antSlideRightOut{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:1}to{-webkit-transform:scaleX(.8);transform:scaleX(.8);-webkit-transform-origin:100% 0;transform-origin:100% 0;opacity:0}}.swing-appear,.swing-enter{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.swing-appear.swing-appear-active,.swing-enter.swing-enter-active{-webkit-animation-name:antSwingIn;animation-name:antSwingIn;-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}@keyframes antSwingIn{0%,to{-webkit-transform:translateX(0);transform:translateX(0)}20%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}40%{-webkit-transform:translateX(10px);transform:translateX(10px)}60%{-webkit-transform:translateX(-5px);transform:translateX(-5px)}80%{-webkit-transform:translateX(5px);transform:translateX(5px)}}.zoom-appear,.zoom-enter,.zoom-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-appear.zoom-appear-active,.zoom-enter.zoom-enter-active{-webkit-animation-name:antZoomIn;animation-name:antZoomIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-leave.zoom-leave-active{-webkit-animation-name:antZoomOut;animation-name:antZoomOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-appear,.zoom-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-appear,.zoom-big-enter,.zoom-big-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-appear.zoom-big-appear-active,.zoom-big-enter.zoom-big-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-appear,.zoom-big-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-appear,.zoom-big-fast-enter,.zoom-big-fast-leave{-webkit-animation-duration:.1s;animation-duration:.1s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-big-fast-appear.zoom-big-fast-appear-active,.zoom-big-fast-enter.zoom-big-fast-enter-active{-webkit-animation-name:antZoomBigIn;animation-name:antZoomBigIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{-webkit-animation-name:antZoomBigOut;animation-name:antZoomBigOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-big-fast-appear,.zoom-big-fast-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-appear,.zoom-up-enter,.zoom-up-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-up-appear.zoom-up-appear-active,.zoom-up-enter.zoom-up-enter-active{-webkit-animation-name:antZoomUpIn;animation-name:antZoomUpIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{-webkit-animation-name:antZoomUpOut;animation-name:antZoomUpOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-up-appear,.zoom-up-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-appear,.zoom-down-enter,.zoom-down-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-down-appear.zoom-down-appear-active,.zoom-down-enter.zoom-down-enter-active{-webkit-animation-name:antZoomDownIn;animation-name:antZoomDownIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{-webkit-animation-name:antZoomDownOut;animation-name:antZoomDownOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-down-appear,.zoom-down-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-appear,.zoom-left-enter,.zoom-left-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-left-appear.zoom-left-appear-active,.zoom-left-enter.zoom-left-enter-active{-webkit-animation-name:antZoomLeftIn;animation-name:antZoomLeftIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{-webkit-animation-name:antZoomLeftOut;animation-name:antZoomLeftOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-left-appear,.zoom-left-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-appear,.zoom-right-enter,.zoom-right-leave{-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-play-state:paused;animation-play-state:paused}.zoom-right-appear.zoom-right-appear-active,.zoom-right-enter.zoom-right-enter-active{-webkit-animation-name:antZoomRightIn;animation-name:antZoomRightIn;-webkit-animation-play-state:running;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{-webkit-animation-name:antZoomRightOut;animation-name:antZoomRightOut;-webkit-animation-play-state:running;animation-play-state:running;pointer-events:none}.zoom-right-appear,.zoom-right-enter{-webkit-transform:scale(0);transform:scale(0);opacity:0;-webkit-animation-timing-function:cubic-bezier(.08,.82,.17,1);animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-leave{-webkit-animation-timing-function:cubic-bezier(.78,.14,.15,.86);animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@-webkit-keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomIn{0%{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@keyframes antZoomOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.2);transform:scale(.2);opacity:0}}@-webkit-keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes antZoomBigIn{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@keyframes antZoomBigOut{0%{-webkit-transform:scale(1);transform:scale(1)}to{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}}@-webkit-keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@keyframes antZoomUpIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}}@-webkit-keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@keyframes antZoomUpOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 0;transform-origin:50% 0}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 0;transform-origin:50% 0;opacity:0}}@-webkit-keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@keyframes antZoomLeftIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}}@-webkit-keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@keyframes antZoomLeftOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:0 50%;transform-origin:0 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:0 50%;transform-origin:0 50%;opacity:0}}@-webkit-keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@keyframes antZoomRightIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}}@-webkit-keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@keyframes antZoomRightOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:100% 50%;transform-origin:100% 50%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:100% 50%;transform-origin:100% 50%;opacity:0}}@-webkit-keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@keyframes antZoomDownIn{0%{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}to{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}}@-webkit-keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}@keyframes antZoomDownOut{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-transform-origin:50% 100%;transform-origin:50% 100%}to{-webkit-transform:scale(.8);transform:scale(.8);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse,.ant-motion-collapse-legacy-active{-webkit-transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important;transition:height .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden}#nprogress{pointer-events:none}#nprogress .bar{position:fixed;top:0;left:0;z-index:1031;width:100%;height:2px;background:#1890ff}#nprogress .peg{position:absolute;right:0;display:block;width:100px;height:100%;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px);-webkit-box-shadow:0 0 10px #1890ff,0 0 5px #1890ff;box-shadow:0 0 10px #1890ff,0 0 5px #1890ff}#nprogress .spinner{position:fixed;top:15px;right:15px;z-index:1031;display:block}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#1890ff;border-left-color:#1890ff;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{position:relative;overflow:hidden}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#app,#root,body,html{height:100%}.colorWeak{-webkit-filter:invert(80%);filter:invert(80%)}.ant-layout.layout-basic{height:100vh;min-height:100vh}canvas{display:block}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility}ol,ul{list-style:none}.table-alert{margin-bottom:16px}.table-operator{margin-bottom:18px}.table-operator button{margin-right:8px}.table-page-search-wrapper .ant-form-inline .ant-form-item{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:0;margin-bottom:24px}.table-page-search-wrapper .ant-form-inline .ant-form-item .ant-form-item-control-wrapper{-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;display:inline-block;vertical-align:middle}.table-page-search-wrapper .ant-form-inline .ant-form-item>.ant-form-item-label{width:auto;padding-right:8px;line-height:32px}.table-page-search-wrapper .ant-form-inline .ant-form-item .ant-form-item-control{height:32px;line-height:32px}.table-page-search-wrapper .table-page-search-submitButtons{display:block;margin-bottom:24px;white-space:nowrap}@media (max-width:480px){.ant-table{width:100%;overflow-x:auto}.ant-table-tbody>tr>td,.ant-table-tbody>tr>th,.ant-table-thead>tr>td,.ant-table-thead>tr>th{white-space:pre}.ant-table-tbody>tr>td>span,.ant-table-tbody>tr>th>span,.ant-table-thead>tr>td>span,.ant-table-thead>tr>th>span{display:block}}#webpack-dev-server-client-overlay,#webpack-hot-middleware-client-overlay,.webpack-dev-server-client-overlay{display:none!important;pointer-events:none!important;visibility:hidden!important}@media (max-width:768px){.ant-pro-global-header-logo{padding:0!important;padding-left:0!important;padding-right:0!important;padding-top:0!important;padding-bottom:0!important}} \ No newline at end of file diff --git a/frontend/dist/css/theme-colors-32dabe8f.css b/frontend/dist/css/theme-colors-e1bf67d0.css similarity index 78% rename from frontend/dist/css/theme-colors-32dabe8f.css rename to frontend/dist/css/theme-colors-e1bf67d0.css index 4e0096a..4fd89cf 100644 --- a/frontend/dist/css/theme-colors-32dabe8f.css +++ b/frontend/dist/css/theme-colors-e1bf67d0.css @@ -19,10 +19,12 @@ :global .ant-pro-global-header-index-right .ant-dropdown-trigger:hover,:global .ant-pro-global-header-index-right .ant-pro-drop-down:hover{color:#1890ff!important} :global a:hover{color:#1890ff!important} :global .anticon:hover{color:#1890ff!important} +:global(.ant-pro-layout).dark :global(.ant-menu-dark .ant-menu-item-selected),:global(.ant-pro-layout).realdark :global(.ant-menu-dark .ant-menu-item-selected){background:rgba(24,144,255,.25)!important} .ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-global-header-index-action:hover{background:#1890ff} .ant-pro-global-header-index-right.ant-pro-global-header-index-dark .ant-pro-drop-down:hover{color:#1890ff} .ant-pro-global-header-index-right .ant-pro-account-avatar .antd-pro-global-header-index-avatar{color:#1890ff} :global .ant-pro-layout.dark .ant-dropdown-menu .ant-dropdown-menu-item:hover,:global .ant-pro-layout.realdark .ant-dropdown-menu .ant-dropdown-menu-item:hover{color:#1890ff!important} +:global body.dark .ant-menu-dark .ant-menu-item-selected,:global body.realdark .ant-menu-dark .ant-menu-item-selected{background:rgba(24,144,255,.25)!important} a{color:#1890ff} a:hover{color:#40a9ff} a:active{color:#096dd9} @@ -33,44 +35,76 @@ html{--antd-wave-shadow-color:#1890ff} #nprogress .bar{background:#1890ff} #nprogress .peg{-webkit-box-shadow:0 0 10px #1890ff,0 0 5px #1890ff;box-shadow:0 0 10px #1890ff,0 0 5px #1890ff} #nprogress .spinner-icon{border-top-color:#1890ff;border-left-color:#1890ff} -.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-icon-pro[data-v-693144f6]{color:#1890ff} -.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper .progress-text[data-v-693144f6]{color:#1890ff} -.fast-analysis-report .loading-container .loading-content-pro .current-step[data-v-693144f6]{color:#1890ff} -.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active[data-v-693144f6]{background:#e6f7ff;color:#1890ff} -.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active .step-dot[data-v-693144f6]{background:#1890ff;-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.2);box-shadow:0 0 0 3px rgba(24,144,255,.2)} -.fast-analysis-report .result-container .decision-card[data-v-693144f6]{border-left:6px solid #1890ff} -.fast-analysis-report .result-container .decision-card .consensus-strip[data-v-693144f6]{background:rgba(24,144,255,.06);border:1px solid rgba(24,144,255,.2)} -.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-title[data-v-693144f6]{color:#1890ff} -.fast-analysis-report .result-container .price-info-row .price-card.current[data-v-693144f6]{border-top:3px solid #1890ff} -.fast-analysis-report .result-container .scores-row .score-item .score-header .anticon[data-v-693144f6]{color:#1890ff} -.fast-analysis-report .result-container .scores-row .score-item.overall[data-v-693144f6]{background:linear-gradient(135deg,#e6f7ff,#fff);border:1px solid #91d5ff} -.fast-analysis-report .result-container .detailed-analysis .analysis-card[data-v-693144f6]{border-left:4px solid #1890ff} -.fast-analysis-report .result-container .detailed-analysis .analysis-card.technical[data-v-693144f6]{border-left-color:#1890ff} -.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.technical .anticon[data-v-693144f6]{color:#1890ff} -.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-693144f6]:before{color:#1890ff} -.fast-analysis-report .result-container .indicators-section .section-title .anticon[data-v-693144f6]{color:#1890ff} -.fast-analysis-report.theme-dark .decision-card[data-v-693144f6]{border-left-color:#1890ff} -.fast-analysis-report.theme-dark .decision-card .consensus-strip[data-v-693144f6]{background:rgba(24,144,255,.12);border-color:rgba(24,144,255,.35)} -.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-title[data-v-693144f6]{color:#69c0ff} -.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.technical[data-v-693144f6]{border-left-color:#1890ff} -.fast-analysis-report.theme-dark .score-item.overall[data-v-693144f6]{background:linear-gradient(135deg,rgba(24,144,255,.1),#2a2e39);border-color:#1890ff} -.left-panel .heatmap-box .box-header[data-v-41eda137] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)} -.left-panel .calendar-box .box-header .box-title .anticon[data-v-41eda137]{color:var(--primary-color,#1890ff)} -.right-panel .analysis-toolbar .analyze-button[data-v-41eda137]{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)} -.right-panel .analysis-main .analysis-placeholder .placeholder-content .placeholder-icon[data-v-41eda137]{color:var(--primary-color,#1890ff)} -.watchlist-panel .watchlist-list .watchlist-item.active[data-v-41eda137]{background:#e6f7ff;border:1px solid #91d5ff} -.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .watchlist-item.active[data-v-41eda137]{background:rgba(24,144,255,.1);border-color:#1890ff} -.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip.active[data-v-41eda137],.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-41eda137]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.1)} -.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip.active[data-v-41eda137],.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-41eda137]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.1)} +body.dark .ant-pagination-item-active,body.realdark .ant-pagination-item-active{border-color:#1890ff!important} +body.dark .ant-btn-default:hover,body.realdark .ant-btn-default:hover{border-color:#1890ff!important;color:#1890ff!important} +body.dark .ant-tabs-tab-active,body.realdark .ant-tabs-tab-active{color:#1890ff!important} +body.dark .ant-select-dropdown .ant-select-dropdown-menu-item-selected,body.realdark .ant-select-dropdown .ant-select-dropdown-menu-item-selected{background:rgba(24,144,255,.1)!important;color:#1890ff!important} +.fast-analysis-report .loading-container .loading-content-pro .loading-header .loading-icon-pro[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report .loading-container .loading-content-pro .progress-wrapper .progress-text[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report .loading-container .loading-content-pro .current-step[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active[data-v-75da11ec]{background:#e6f7ff;color:#1890ff} +.fast-analysis-report .loading-container .loading-content-pro .steps-list .step-item.active .step-dot[data-v-75da11ec]{background:#1890ff;-webkit-box-shadow:0 0 0 3px rgba(24,144,255,.2);box-shadow:0 0 0 3px rgba(24,144,255,.2)} +.fast-analysis-report .result-container .decision-card[data-v-75da11ec]{border-left:6px solid #1890ff} +.fast-analysis-report .result-container .decision-card .consensus-strip[data-v-75da11ec]{background:rgba(24,144,255,.06);border:1px solid rgba(24,144,255,.2)} +.fast-analysis-report .result-container .decision-card .consensus-strip .consensus-strip-title[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report .result-container .price-info-row .price-card.current[data-v-75da11ec]{border-top:3px solid #1890ff} +.fast-analysis-report .result-container .scores-row .score-item .score-header .anticon[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report .result-container .scores-row .score-item.overall[data-v-75da11ec]{background:linear-gradient(135deg,#e6f7ff,#fff);border:1px solid #91d5ff} +.fast-analysis-report .result-container .detailed-analysis .analysis-card[data-v-75da11ec]{border-left:4px solid #1890ff} +.fast-analysis-report .result-container .detailed-analysis .analysis-card.technical[data-v-75da11ec]{border-left-color:#1890ff} +.fast-analysis-report .result-container .detailed-analysis .analysis-card .analysis-card-header.technical .anticon[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report .result-container .analysis-details .detail-section .detail-list li[data-v-75da11ec]:before{color:#1890ff} +.fast-analysis-report .result-container .indicators-section .section-title .anticon[data-v-75da11ec]{color:#1890ff} +.fast-analysis-report.theme-dark .decision-card[data-v-75da11ec]{border-left-color:#1890ff} +.fast-analysis-report.theme-dark .decision-card .consensus-strip[data-v-75da11ec]{background:rgba(24,144,255,.12);border-color:rgba(24,144,255,.35)} +.fast-analysis-report.theme-dark .decision-card .consensus-strip .consensus-strip-title[data-v-75da11ec]{color:#69c0ff} +.fast-analysis-report.theme-dark .detailed-analysis .analysis-card.technical[data-v-75da11ec]{border-left-color:#1890ff} +.fast-analysis-report.theme-dark .detail-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .feedback-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .indicators-section .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .price-card .indicators-methodology .anticon[data-v-75da11ec],.fast-analysis-report.theme-dark .score-item .indicators-methodology .anticon[data-v-75da11ec]{color:#69c0ff} +.left-panel .heatmap-box .box-header[data-v-5cbe52d9] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)} +.left-panel .calendar-box .box-header .box-title .anticon[data-v-5cbe52d9]{color:var(--primary-color,#1890ff)} +.right-panel .analysis-toolbar .analyze-button[data-v-5cbe52d9]{background:var(--primary-color,#1890ff);border-color:var(--primary-color,#1890ff)} +.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card.active[data-v-5cbe52d9]{background:rgba(24,144,255,.08);border-color:#1890ff} +.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card-hover-actions .wl-hover-btn[data-v-5cbe52d9]:hover{color:#1890ff;background:rgba(24,144,255,.1)} +.ai-analysis-container.theme-dark .watchlist-panel .watchlist-list .wl-card.active .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,rgba(24,144,255,.06)));background:linear-gradient(90deg,transparent,rgba(24,144,255,.06) 30%)} +.ai-analysis-container.theme-dark .placeholder-hero .hero-badge[data-v-5cbe52d9]{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.2)} +.ai-analysis-container.theme-dark .placeholder-hero .hstat[data-v-5cbe52d9]:hover{border-color:#1890ff;-webkit-box-shadow:0 4px 16px rgba(24,144,255,.12);box-shadow:0 4px 16px rgba(24,144,255,.12)} +.ai-analysis-container.theme-dark .placeholder-hero .hstat-icon[data-v-5cbe52d9]{background:linear-gradient(135deg,rgba(24,144,255,.12),rgba(114,46,209,.08))} +.ai-analysis-container.theme-dark .placeholder-hero .hero-cta .ant-btn-primary[data-v-5cbe52d9]{-webkit-box-shadow:0 4px 14px rgba(24,144,255,.35);box-shadow:0 4px 14px rgba(24,144,255,.35)} +.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip.active[data-v-5cbe52d9],.ai-analysis-container.theme-dark .watchlist-bar-legacy .stock-chip[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)} +.ai-analysis-container.theme-dark .hero-cta .ant-btn[data-v-5cbe52d9]:not(.ant-btn-primary):hover{border-color:#1890ff;color:#1890ff} +.ai-analysis-container.theme-dark .panel-header-icon[data-v-5cbe52d9]:hover{color:#1890ff;background:rgba(24,144,255,.08)} +.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip.active[data-v-5cbe52d9],.ai-analysis-container.theme-dark .watchlist-bar-compat .stock-chip[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)} +.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-tab-active{color:#1890ff!important} +.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-tabs-ink-bar{background-color:#1890ff} +.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-btn-default:hover{border-color:#1890ff;color:#1890ff} +.ai-analysis-container.theme-dark[data-v-5cbe52d9] .ant-alert{background:rgba(24,144,255,.06)} +.hero-bg-circle.c1[data-v-5cbe52d9]{background:radial-gradient(circle,rgba(24,144,255,.1) 0,transparent 70%)} +.hero-bg-grid[data-v-5cbe52d9]{background-image:linear-gradient(rgba(24,144,255,.03) 1px,transparent 0),linear-gradient(90deg,rgba(24,144,255,.03) 1px,transparent 0)} +.hero-badge[data-v-5cbe52d9]{color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08);border:1px solid rgba(24,144,255,.2)} +.hstat[data-v-5cbe52d9]:hover{border-color:var(--primary-color,#1890ff);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.1);box-shadow:0 4px 16px rgba(24,144,255,.1)} +.hstat-icon[data-v-5cbe52d9]{background:linear-gradient(135deg,rgba(24,144,255,.1),rgba(114,46,209,.08));color:var(--primary-color,#1890ff)} +.hero-cta .ant-btn-primary[data-v-5cbe52d9]{-webkit-box-shadow:0 4px 14px rgba(24,144,255,.3);box-shadow:0 4px 14px rgba(24,144,255,.3)} +.panel-header-icon[data-v-5cbe52d9]:hover{color:var(--primary-color,#1890ff);background:rgba(24,144,255,.08)} +.wl-card.active[data-v-5cbe52d9]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border-color:#91d5ff} +.wl-card.active .wl-card-hover-actions[data-v-5cbe52d9]{background:-webkit-gradient(linear,left top,right top,from(transparent),color-stop(30%,#e6f7ff));background:linear-gradient(90deg,transparent,#e6f7ff 30%)} +.wl-hover-btn[data-v-5cbe52d9]:hover{color:var(--primary-color,#1890ff);background:#e6f7ff} +.qd-dark-modal .ant-modal-footer .ant-btn-default:hover{border-color:#1890ff;color:#1890ff} +.qd-dark-modal .ant-tabs-tab-active{color:#1890ff!important} +.qd-dark-modal .ant-tag-blue{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.3);color:#1890ff} +.qd-dark-modal .ant-alert{background:rgba(24,144,255,.06)} +.qd-dark-modal .ant-alert-info .ant-alert-icon{color:#1890ff} +.qd-dark-modal .batch-symbols-preview .ant-tag{background:rgba(24,144,255,.1);border-color:rgba(24,144,255,.3);color:#1890ff} +.qd-dark-drawer .ant-btn-default:hover{border-color:#1890ff;color:#1890ff} +.qd-dark-modal .ant-select-dropdown .ant-select-dropdown-menu-item-selected,body.colorWeak .ant-select-dropdown .ant-select-dropdown-menu-item-selected{background:rgba(24,144,255,.1);color:#1890ff} .qt-header .qt-header-left .qt-icon[data-v-0d547552]{color:#1890ff} .theme-dark[data-v-0d547552] .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{background:#1890ff;border-color:#1890ff} .theme-dark[data-v-0d547552] .ant-slider-track{background:#1890ff} -.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.ai-prob[data-v-41dfa054]{color:#1890ff} -.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-value[data-v-41dfa054]{color:#1890ff} -.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-20b827f5]{color:#1890ff} -.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-20b827f5]{background:linear-gradient(135deg,#1890ff,#722ed1)} -.ai-asset-analysis-page .qt-floating-btn[data-v-20b827f5]{background:linear-gradient(135deg,#1890ff,#722ed1);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4)} -.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder .placeholder-icon[data-v-20b827f5]{color:#1890ff} +.polymarket-analysis-modal .result-section .analysis-result .probability-comparison .prob-item .prob-value.ai-prob[data-v-67e891d2]{color:#1890ff} +.polymarket-analysis-modal .result-section .analysis-result .recommendation-section .rec-card .rec-value[data-v-67e891d2]{color:#1890ff} +.ai-asset-analysis-page .opp-section .opp-card .opp-action[data-v-443699fa]{color:#1890ff} +.ai-asset-analysis-page .opp-section .opp-card .opp-trade-btn[data-v-443699fa]{background:linear-gradient(135deg,#1890ff,#722ed1)} +.ai-asset-analysis-page .qt-floating-btn[data-v-443699fa]{background:linear-gradient(135deg,#1890ff,#722ed1);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4)} +.ai-asset-analysis-page .workspace-card .tab-body .polymarket-tab-content .polymarket-placeholder .placeholder-icon[data-v-443699fa]{color:#1890ff} .code-section .section-header .section-title[data-v-4fea1865]:before{background:#1890ff} .code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link{color:#1890ff} .code-section .section-header .section-actions[data-v-4fea1865] .ant-btn-link:hover{color:#40a9ff} @@ -81,47 +115,47 @@ html{--antd-wave-shadow-color:#1890ff} .editor-footer[data-v-4fea1865] .ant-btn:not(.ant-btn-primary):hover{border-color:#40a9ff;color:#40a9ff;-webkit-box-shadow:0 2px 8px rgba(24,144,255,.2);box-shadow:0 2px 8px rgba(24,144,255,.2)} .editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary{-webkit-box-shadow:0 2px 4px rgba(24,144,255,.3);box-shadow:0 2px 4px rgba(24,144,255,.3)} .editor-footer[data-v-4fea1865] .ant-btn.ant-btn-primary:hover{-webkit-box-shadow:0 4px 12px rgba(24,144,255,.4);box-shadow:0 4px 12px rgba(24,144,255,.4)} -.drawing-tool-btn[data-v-5f0b12e1]:hover{color:#1890ff} -.drawing-tool-btn.active[data-v-5f0b12e1]{background:#e6f7ff;color:#1890ff;border:1px solid #1890ff} -.indicator-btn[data-v-5f0b12e1]:hover{color:#1890ff;border-color:#1890ff} -.indicator-btn.active[data-v-5f0b12e1]{color:#1890ff;border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.1);box-shadow:0 0 0 2px rgba(24,144,255,.1)} +.drawing-tool-btn[data-v-58f93984]:hover{color:#1890ff} +.drawing-tool-btn.active[data-v-58f93984]{background:#e6f7ff;color:#1890ff;border:1px solid #1890ff} +.indicator-btn[data-v-58f93984]:hover{color:#1890ff;border-color:#1890ff} +.indicator-btn.active[data-v-58f93984]{color:#1890ff;border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.1);box-shadow:0 0 0 2px rgba(24,144,255,.1)} .section-title .anticon[data-v-473e449c]{color:#1890ff} .loading-overlay .bar[data-v-473e449c]{background:-webkit-gradient(linear,left top,left bottom,from(#1890ff),to(#52c41a));background:linear-gradient(180deg,#1890ff,#52c41a)} .loading-overlay .loading-text[data-v-473e449c]{color:#1890ff} -.symbol-select[data-v-b17e86c2] .ant-select-selection:hover{border-color:#1890ff} -.symbol-select[data-v-b17e86c2] .ant-select-focused .ant-select-selection{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)} -.timeframe-item[data-v-b17e86c2]:hover{color:#1890ff} -.timeframe-item.active[data-v-b17e86c2]{color:#1890ff} -.panel-header .realtime-toggle-btn[data-v-b17e86c2]:hover,.panel-header .theme-toggle-btn[data-v-b17e86c2]:hover{color:#1890ff} -.panel-header .realtime-toggle-btn.active[data-v-b17e86c2],.panel-header .theme-toggle-btn.active[data-v-b17e86c2]{color:#1890ff;background:#e6f7ff} -.indicator-card[data-v-b17e86c2]:hover{border-color:#1890ff} -.indicator-card.active[data-v-b17e86c2]{background:#e6f7ff;border-color:#1890ff} -.indicator-card.active .card-name[data-v-b17e86c2]{color:#1890ff} -.card-action[data-v-b17e86c2]:hover{color:#1890ff} -.action-icon.edit-icon[data-v-b17e86c2]{color:#1890ff} -.action-icon.edit-icon[data-v-b17e86c2]:hover{color:#40a9ff} -.action-icon[data-v-b17e86c2]:hover{color:#1890ff} -.action-icon.publish-icon[data-v-b17e86c2]{color:#1890ff} -.action-icon.publish-icon[data-v-b17e86c2]:hover{color:#40a9ff} -.action-icon.expiry-icon[data-v-b17e86c2]{color:#1890ff} +.symbol-select[data-v-211c2fea] .ant-select-selection:hover{border-color:#1890ff} +.symbol-select[data-v-211c2fea] .ant-select-focused .ant-select-selection{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.2);box-shadow:0 0 0 2px rgba(24,144,255,.2)} +.timeframe-item[data-v-211c2fea]:hover{color:#1890ff} +.timeframe-item.active[data-v-211c2fea]{color:#1890ff} +.panel-header .realtime-toggle-btn[data-v-211c2fea]:hover,.panel-header .theme-toggle-btn[data-v-211c2fea]:hover{color:#1890ff} +.panel-header .realtime-toggle-btn.active[data-v-211c2fea],.panel-header .theme-toggle-btn.active[data-v-211c2fea]{color:#1890ff;background:#e6f7ff} +.indicator-card[data-v-211c2fea]:hover{border-color:#1890ff} +.indicator-card.active[data-v-211c2fea]{background:#e6f7ff;border-color:#1890ff} +.indicator-card.active .card-name[data-v-211c2fea]{color:#1890ff} +.card-action[data-v-211c2fea]:hover{color:#1890ff} +.action-icon.edit-icon[data-v-211c2fea]{color:#1890ff} +.action-icon.edit-icon[data-v-211c2fea]:hover{color:#40a9ff} +.action-icon[data-v-211c2fea]:hover{color:#1890ff} +.action-icon.publish-icon[data-v-211c2fea]{color:#1890ff} +.action-icon.publish-icon[data-v-211c2fea]:hover{color:#40a9ff} +.action-icon.expiry-icon[data-v-211c2fea]{color:#1890ff} .dark-dropdown .ant-select-dropdown-menu-item-active{background-color:#e6f7ff;color:#1890ff} -.qt-header-btn[data-v-b17e86c2]{background:linear-gradient(135deg,#1890ff,#722ed1);-webkit-box-shadow:0 2px 8px rgba(24,144,255,.3);box-shadow:0 2px 8px rgba(24,144,255,.3)} -.qt-header-btn[data-v-b17e86c2]:focus,.qt-header-btn[data-v-b17e86c2]:hover{background:linear-gradient(135deg,#40a9ff,#9254de);-webkit-box-shadow:0 4px 12px rgba(24,144,255,.45);box-shadow:0 4px 12px rgba(24,144,255,.45)} -.qt-floating-btn[data-v-b17e86c2]{background:linear-gradient(135deg,#1890ff,#722ed1);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4)} -.qt-floating-btn[data-v-b17e86c2]:hover{-webkit-box-shadow:0 6px 24px rgba(24,144,255,.55);box-shadow:0 6px 24px rgba(24,144,255,.55)} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-selection:hover,body.dark,body.realdark{border-color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-b17e86c2] .ant-select-focused .ant-select-selection,body.dark,body.realdark{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.3);box-shadow:0 0 0 2px rgba(24,144,255,.3)} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item.active[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn.active[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-b17e86c2]:hover,body.dark,body.realdark{border-color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active .card-name[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-b17e86c2],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-b17e86c2],body.dark,body.realdark{color:#1890ff} -.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-b17e86c2]:hover,body.dark,body.realdark{color:#40a9ff} +.qt-header-btn[data-v-211c2fea]{background:linear-gradient(135deg,#1890ff,#722ed1);-webkit-box-shadow:0 2px 8px rgba(24,144,255,.3);box-shadow:0 2px 8px rgba(24,144,255,.3)} +.qt-header-btn[data-v-211c2fea]:focus,.qt-header-btn[data-v-211c2fea]:hover{background:linear-gradient(135deg,#40a9ff,#9254de);-webkit-box-shadow:0 4px 12px rgba(24,144,255,.45);box-shadow:0 4px 12px rgba(24,144,255,.45)} +.qt-floating-btn[data-v-211c2fea]{background:linear-gradient(135deg,#1890ff,#722ed1);-webkit-box-shadow:0 4px 16px rgba(24,144,255,.4);box-shadow:0 4px 16px rgba(24,144,255,.4)} +.qt-floating-btn[data-v-211c2fea]:hover{-webkit-box-shadow:0 6px 24px rgba(24,144,255,.55);box-shadow:0 6px 24px rgba(24,144,255,.55)} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-selection:hover,body.dark,body.realdark{border-color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .symbol-select[data-v-211c2fea] .ant-select-focused .ant-select-selection,body.dark,body.realdark{border-color:#1890ff;-webkit-box-shadow:0 0 0 2px rgba(24,144,255,.3);box-shadow:0 0 0 2px rgba(24,144,255,.3)} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .timeframe-group .timeframe-item.active[data-v-211c2fea],body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn.active[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .panel-header .realtime-toggle-btn[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-211c2fea],body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .section-label .buy-indicator-btn[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card[data-v-211c2fea]:hover,body.dark,body.realdark{border-color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card.active .card-name[data-v-211c2fea],body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-211c2fea],.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.edit-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-211c2fea],body.dark,body.realdark{color:#1890ff} +.ant-layout.dark,.ant-layout.realdark,.ant-pro-layout.dark,.ant-pro-layout.realdark,.chart-container.theme-dark .chart-right .indicators-panel .indicator-card .action-icon.publish-icon[data-v-211c2fea]:hover,body.dark,body.realdark{color:#40a9ff} .comment-list .comment-form .form-header .edit-label[data-v-4973cae6]{color:#1890ff} .comment-list .comments .comment-item.is-mine[data-v-4973cae6]{background:rgba(24,144,255,.02)} [data-theme=dark] .comment-list .comments .comment-item.is-mine[data-v-4973cae6]{background:rgba(24,144,255,.05)} @@ -185,32 +219,32 @@ body.dark .trading-records ::v-deep .ant-pagination .ant-pagination-next:hover . .theme-dark .position-checkbox-item[data-v-398d904c]:hover{background:rgba(24,144,255,.1)} .theme-dark .alert-symbol-info .current-price-info[data-v-398d904c]{background:linear-gradient(135deg,rgba(24,144,255,.15),rgba(114,46,209,.1))} .theme-dark .alert-symbol-info .current-price-info .price[data-v-398d904c]{color:#40a9ff} -.user-manage-page .page-header .page-title .anticon[data-v-49c4f239]{color:#1890ff} -.user-manage-page .address-text[data-v-49c4f239],.user-manage-page .hash-text[data-v-49c4f239]{color:#1890ff} -.user-manage-page.theme-dark .manage-tabs[data-v-49c4f239] .ant-tabs-tab-active{color:#1890ff} -.user-manage-page .current-credits-info .value[data-v-49c4f239],.user-manage-page .current-vip-info .value[data-v-49c4f239]{color:#1890ff} -.profile-page .page-header .page-title .anticon[data-v-86a53e9c]{color:#1890ff} -.profile-page .profile-card .profile-info .info-item .anticon[data-v-86a53e9c]{color:#1890ff} -.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-tabs-tab-active{color:#1890ff} -.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-86a53e9c] .ant-input:hover{border-color:#1890ff} -.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-86a53e9c] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff} -.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff} -.profile-page.theme-dark[data-v-86a53e9c] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff} -.profile-page.theme-dark[data-v-86a53e9c] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff} -.billing-page .plan-card.highlight[data-v-0cdd5f9c]{border:1px solid rgba(24,144,255,.35)} +.user-manage-page .page-header .page-title .anticon[data-v-f0405968]{color:#1890ff} +.user-manage-page .address-text[data-v-f0405968],.user-manage-page .hash-text[data-v-f0405968]{color:#1890ff} +.user-manage-page.theme-dark .manage-tabs[data-v-f0405968] .ant-tabs-tab-active{color:#1890ff} +.user-manage-page .current-credits-info .value[data-v-f0405968],.user-manage-page .current-vip-info .value[data-v-f0405968]{color:#1890ff} +.profile-page .page-header .page-title .anticon[data-v-6dceb76a]{color:#1890ff} +.profile-page .profile-card .profile-info .info-item .anticon[data-v-6dceb76a]{color:#1890ff} +.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-tabs-tab-active{color:#1890ff} +.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password:focus,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input-password:hover,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input:focus,.profile-page.theme-dark .edit-card[data-v-6dceb76a] .ant-input:hover{border-color:#1890ff} +.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .notification-settings-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .password-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-checkbox-checked .ant-checkbox-inner,.profile-page.theme-dark .profile-form[data-v-6dceb76a] .ant-radio-checked .ant-radio-inner{background-color:#1890ff;border-color:#1890ff} +.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item:hover{border-color:#1890ff} +.profile-page.theme-dark[data-v-6dceb76a] .ant-pagination .ant-pagination-item-active{background:#1890ff;border-color:#1890ff} +.profile-page.theme-dark[data-v-6dceb76a] .ant-btn.ant-btn-default:hover{border-color:#1890ff;color:#1890ff} +.billing-page .plan-card.highlight[data-v-714c882a]{border:1px solid rgba(24,144,255,.35)} .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.08);color:#1890ff} -.theme-dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,.theme-dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.15);color:#40a9ff} -.settings-page .settings-header .page-title .anticon[data-v-20857e25]{color:#1890ff} -.settings-page .openrouter-balance-card .ant-card[data-v-20857e25]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border:1px solid #91d5ff} -.settings-page .openrouter-balance-card .balance-header .balance-title[data-v-20857e25]{color:#1890ff} -.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .ant-collapse-arrow{color:#1890ff} -.settings-page .settings-collapse[data-v-20857e25] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{color:#1890ff} -.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#1890ff} -.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link{color:#1890ff;background:rgba(24,144,255,.08)} -.settings-page .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.15)} -.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link{background:rgba(24,144,255,.15)} -.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.25)} -.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-number:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input-password:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-input:hover,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection:focus,.settings-page.theme-dark .settings-form[data-v-20857e25] .ant-select-selection:hover{border-color:#1890ff} +body.dark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.dark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .addr-box .copy-btn:hover,body.realdark .usdt-checkout .checkout-body .info-section .amt-box .copy-btn:hover{background:rgba(24,144,255,.15);color:#40a9ff} +.settings-page .settings-header .page-title .anticon[data-v-f144964c]{color:#1890ff} +.settings-page .openrouter-balance-card .ant-card[data-v-f144964c]{background:linear-gradient(135deg,#e6f7ff,#f0f5ff);border:1px solid #91d5ff} +.settings-page .openrouter-balance-card .balance-header .balance-title[data-v-f144964c]{color:#1890ff} +.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .ant-collapse-arrow{color:#1890ff} +.settings-page .settings-collapse[data-v-f144964c] .ant-collapse-item .ant-collapse-header .panel-header .panel-icon-left{color:#1890ff} +.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .help-icon:hover{color:#1890ff} +.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link{color:#1890ff;background:rgba(24,144,255,.08)} +.settings-page .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.15)} +.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link{background:rgba(24,144,255,.15)} +.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-form-item-label .form-label-with-tooltip .api-link:hover{background:rgba(24,144,255,.25)} +.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-number:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input-password:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-input:hover,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection:focus,.settings-page.theme-dark .settings-form[data-v-f144964c] .ant-select-selection:hover{border-color:#1890ff} .turnstile-container .turnstile-error a[data-v-20437450]{color:#1890ff} .main .login-method-switch a[data-v-de9678f6]:hover{color:#1890ff} .main .login-method-switch a.active[data-v-de9678f6]{color:#1890ff;border-bottom-color:#1890ff} diff --git a/frontend/dist/index.html b/frontend/dist/index.html index d03a9f5..cca8f9b 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -421,4 +421,4 @@ .brand-text { font-size: 20px; } - }

Landing

QuantDinger
\ No newline at end of file + }

Landing

QuantDinger
\ No newline at end of file diff --git a/frontend/dist/js/125-legacy.00a8217b.js b/frontend/dist/js/125-legacy.00a8217b.js deleted file mode 100644 index ccbd28d..0000000 --- a/frontend/dist/js/125-legacy.00a8217b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[125],{87125:function(t,s,a){a.r(s),a.d(s,{default:function(){return M}});a(28706),a(34782),a(62010),a(9868);var e=function(){var t=this,s=t._self._c;return s("div",{staticClass:"ai-analysis-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded},style:{"--primary-color":t.primaryColor}},[s("div",{staticClass:"main-content-full"},[s("div",{staticClass:"top-index-bar"},[t.loadingSentiment?[t._m(0),t._m(1),t._m(2)]:[s("div",{staticClass:"indicator-box fear-greed",class:t.getFearGreedClass(t.marketData.fearGreed)},[s("span",{staticClass:"ind-label"},[t._v(t._s(t.$t("globalMarket.fearGreedShort")))]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.fearGreed||"--"))])]),s("div",{staticClass:"indicator-box vix",class:t.getVixLevel(t.marketData.vix)},[s("span",{staticClass:"ind-label"},[t._v("VIX")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.vix||"--"))])]),s("div",{staticClass:"indicator-box dxy"},[s("span",{staticClass:"ind-label"},[t._v("DXY")]),s("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.dxy||"--"))])])],s("div",{staticClass:"indices-marquee"},[t.loadingIndices?[s("div",{staticClass:"indices-loading"},[s("a-icon",{attrs:{type:"loading"}}),t._v(" "+t._s(t.$t("common.loading")||"加载中...")+" ")],1)]:t.marketData.indices.length>0?[s("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(a){return s("div",{key:"a-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(a){return s("div",{key:"b-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])})],2)]:[s("div",{staticClass:"indices-empty"},[t._v("--")])]],2),s("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[s("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),s("div",{staticClass:"main-body"},[s("div",{staticClass:"left-panel"},[s("div",{staticClass:"heatmap-box"},[s("div",{staticClass:"box-header"},[s("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(s){t.heatmapType=s},expression:"heatmapType"}},[s("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),s("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),s("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),s("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),s("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return s("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(a,e){return s("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(a.value)},[s("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(a)))]),a.price?s("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(a.price)))]):t._e(),s("span",{staticClass:"heat-val"},[t._v(t._s(a.value>=0?"+":"")+t._s(t.formatNum(a.value))+"%")])])}):[s("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),s("div",{staticClass:"calendar-box"},[s("div",{staticClass:"box-header"},[s("span",{staticClass:"box-title"},[s("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),s("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return s("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(a){return s("div",{key:a.id,staticClass:"cal-item",class:a.importance},[s("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(a.date)))]),s("span",{staticClass:"cal-time"},[t._v(t._s(a.time||"--:--"))]),s("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(a.country)))]),s("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?a.name:a.name_en))]),s("span",{staticClass:"cal-impact",class:t.getImpactClass(a)},["bullish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-down"}}):s("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(a.actual||a.forecast||"--")+" ")],1)])}):[s("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),s("div",{staticClass:"right-panel"},[s("div",{staticClass:"analysis-toolbar"},[s("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(s){t.selectedSymbol=s},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(a){return s("a-select-option",{key:"".concat(a.market,"-").concat(a.symbol),attrs:{value:"".concat(a.market,":").concat(a.symbol)}},[s("span",{staticClass:"symbol-option"},[s("a-tag",{attrs:{color:t.getMarketColor(a.market),size:"small"}},[t._v(t._s(t.getMarketName(a.market)))]),s("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(a.symbol))]),a.name?s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]):t._e()],1)])}),s("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[s("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),s("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),s("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(s){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),s("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():s("div",{staticClass:"analysis-placeholder"},[s("div",{staticClass:"placeholder-content"},[s("div",{staticClass:"placeholder-icon"},[s("a-icon",{attrs:{type:"robot"}})],1),s("h3",[t._v(t._s(t.$t("fastAnalysis.selectTip")))]),s("p",[t._v(t._s(t.$t("fastAnalysis.selectHint")))])])]),t.analysisResult||t.analyzing||t.analysisError?s("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),s("div",{staticClass:"watchlist-panel"},[s("div",{staticClass:"panel-header"},[s("span",{staticClass:"panel-title"},[s("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),s("a-button",{attrs:{type:"link",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}})],1)],1),s("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(a){var e,i,r;return s("div",{key:"".concat(a.market,"-").concat(a.symbol),staticClass:"watchlist-item",class:{active:t.selectedSymbol==="".concat(a.market,":").concat(a.symbol)},on:{click:function(s){return t.selectWatchlistItem(a)}}},[s("div",{staticClass:"item-main"},[s("span",{staticClass:"item-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"item-name"},[t._v(t._s(a.name||t.getMarketName(a.market)))])]),t.watchlistPrices["".concat(a.market,":").concat(a.symbol)]?s("div",{staticClass:"item-price"},[s("span",{staticClass:"price-value"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(a.market,":").concat(a.symbol)].price)))]),s("span",{staticClass:"price-change",class:((null===(e=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(r=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===r?void 0:r.change))+"% ")])]):t._e(),s("a-icon",{staticClass:"item-remove",attrs:{type:"close"},on:{click:function(s){return s.stopPropagation(),t.removeFromWatchlist(a)}}})],1)}),t.watchlist&&0!==t.watchlist.length?t._e():s("div",{staticClass:"watchlist-empty"},[s("a-icon",{attrs:{type:"inbox"}}),s("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),s("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)],1)],2)])])]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[s("div",{staticClass:"add-stock-modal-content"},[s("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(s){t.selectedMarketTab=s},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(a){return s("a-tab-pane",{key:a.value,attrs:{tab:t.$t(a.i18nKey||"dashboard.analysis.market.".concat(a.value))}})}),1),s("div",{staticClass:"symbol-search-section"},[s("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(s){t.symbolSearchKeyword=s},expression:"symbolSearchKeyword"}},[s("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?s("div",{staticClass:"search-results-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),s("div",{staticClass:"hot-symbols-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),s("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):s("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?s("div",{staticClass:"selected-symbol-section"},[s("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(s){t.selectedSymbolForAdd=null}}},[s("template",{slot:"description"},[s("div",{staticClass:"selected-symbol-info"},[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),s("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?s("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"}},on:{cancel:function(s){t.showHistoryModal=!1}}},[s("a-spin",{attrs:{spinning:t.historyLoading}},[s("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(s){t.historyPage=s,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(s,a){t.historyPageSize=a,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[s("div",[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(a.market)}},[t._v(" "+t._s(t.getMarketName(a.market))+" ")]),s("strong",[t._v(t._s(a.symbol))]),s("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===a.decision?"green":"SELL"===a.decision?"red":"blue"}},[t._v(" "+t._s(a.decision)+" ")]),s("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(a.confidence)+"% ")])],1),s("div",[s("a-button",{attrs:{type:"link",size:"small",icon:"eye"},on:{click:function(s){return t.viewHistoryResult(a)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),s("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(s){return t.deleteHistoryItem(a)}}},[s("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),s("template",{slot:"description"},[s("div",{staticStyle:{color:"#666","font-size":"12px"}},[a.price?s("span",[t._v("$"+t._s(t.formatNumber(a.price)))]):t._e(),a.summary?s("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(a.summary.substring(0,80))+t._s(a.summary.length>80?"...":""))]):t._e()]),a.created_at?s("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(a.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():s("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}],r=a(44735),n=a(15863),l=a(81127),o=a(56252),c=a(76338),d=(a(74423),a(62062),a(2892),a(32637),a(40150),a(26099),a(21699),a(42762),a(23500),a(95353)),u=a(505),m=a(35038),h=a(75769),y="/api/fast-analysis";function p(t){return(0,h.Ay)({url:"".concat(y,"/analyze"),method:"post",data:t,timeout:3e5})}function v(t){return(0,h.Ay)({url:"".concat(y,"/history/all"),method:"get",params:t})}function f(t){return(0,h.Ay)({url:"".concat(y,"/history/").concat(t),method:"delete"})}function g(t){return(0,h.Ay)({url:"".concat(y,"/feedback"),method:"post",data:t})}var b=a(44146),_=(a(79432),function(){var t,s,a,e,i,r,n,l,o,c,d,u,m,h,y,p,v,f,g,b,_,k,C,S,A,w=this,$=w._self._c;return $("div",{staticClass:"fast-analysis-report",class:{"theme-dark":w.isDarkTheme}},[w.loading?$("div",{staticClass:"loading-container"},[$("div",{staticClass:"loading-content-pro"},[$("div",{staticClass:"loading-header"},[$("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),$("span",{staticClass:"loading-title"},[w._v(w._s(w.$t("fastAnalysis.analyzing")))])],1),$("div",{staticClass:"progress-wrapper"},[$("a-progress",{attrs:{percent:w.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),$("span",{staticClass:"progress-text"},[w._v(w._s(w.formatProgress(w.progressPercent))+"%")])],1),$("div",{staticClass:"current-step"},[$("a-icon",{attrs:{type:"loading",spin:""}}),$("span",[w._v(w._s(w.currentStepText))])],1),$("div",{staticClass:"steps-list"},[$("div",{staticClass:"step-item",class:{done:w.step>1,active:1===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step1")||"获取实时数据"))]),w.step>1?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>2,active:2===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step2")||"计算技术指标"))]),w.step>2?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>3,active:3===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step3")||"AI深度分析"))]),w.step>3?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>4,active:4===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step4")||"生成报告"))]),w.step>4?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1)]),$("div",{staticClass:"loading-footer"},[$("span",{staticClass:"elapsed-time"},[w._v(w._s(w.elapsedTimeText))])])])]):w.error?$("div",{staticClass:"error-container"},[$("a-result",{attrs:{status:"warning"===w.errorTone?"warning":"error",title:w.errorTitle,"sub-title":w.error},scopedSlots:w._u([{key:"extra",fn:function(){return[$("a-button",{attrs:{type:"primary"},on:{click:function(t){return w.$emit("retry")}}},[w._v(" "+w._s(w.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):w.result?$("div",{staticClass:"result-container"},[$("div",{staticClass:"decision-card",class:w.decisionClass},[$("div",{staticClass:"decision-main"},[$("div",{staticClass:"decision-badge"},[$("a-icon",{attrs:{type:w.decisionIcon}}),$("span",{staticClass:"decision-text"},[w._v(w._s(w.result.decision))])],1),$("div",{staticClass:"confidence-ring"},[$("a-progress",{attrs:{type:"circle",percent:w.result.confidence,width:80,strokeColor:w.confidenceColor},scopedSlots:w._u([{key:"format",fn:function(t){return[$("span",{staticClass:"confidence-value"},[w._v(w._s(t)+"%")])]}}])}),$("div",{staticClass:"confidence-label"},[w._v(w._s(w.$t("fastAnalysis.confidence")))])],1)]),$("div",{staticClass:"decision-summary"},[w._v(" "+w._s(w.result.summary)+" ")]),w.consensusBlock?$("div",{staticClass:"consensus-strip"},[$("div",{staticClass:"consensus-strip-title"},[$("a-icon",{attrs:{type:"cluster"}}),w._v(" "+w._s(w.$t("fastAnalysis.consensusTitle"))+" ")],1),$("div",{staticClass:"consensus-strip-metrics"},[$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusDecision")))]),w._v(" "+w._s(w.consensusBlock.consensus_decision)+" ")]),$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusScore")))]),w._v(" "+w._s(w.formatConsensusNum(w.consensusBlock.consensus_score))+" ")]),null!=w.consensusBlock.agreement_ratio?$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusAgreement")))]),w._v(" "+w._s(w.formatAgreementPct(w.consensusBlock.agreement_ratio))+" ")]):w._e()])]):w._e()]),$("div",{staticClass:"price-info-row"},[$("div",{staticClass:"price-card current"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.currentPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(t=w.result.market_data)||void 0===t?void 0:t.current_price)))]),$("div",{staticClass:"price-change",class:(null===(s=w.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"positive":"negative"},[w._v(" "+w._s((null===(a=w.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"+":"")+w._s(w.formatNumber(null===(e=w.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),$("div",{staticClass:"price-card entry"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.entryPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(i=w.result.trading_plan)||void 0===i?void 0:i.entry_price)))])]),$("div",{staticClass:"price-card stop"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.stopLoss")))]),$("div",{staticClass:"price-value negative"},[w._v("$"+w._s(w.formatPrice(null===(r=w.result.trading_plan)||void 0===r?void 0:r.stop_loss)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.stopLossHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),$("div",{staticClass:"price-card target"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.takeProfit")))]),$("div",{staticClass:"price-value positive"},[w._v("$"+w._s(w.formatPrice(null===(n=w.result.trading_plan)||void 0===n?void 0:n.take_profit)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.takeProfitHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),$("div",{staticClass:"scores-row"},[$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technical")))])],1),$("a-progress",{attrs:{percent:(null===(l=w.result.scores)||void 0===l?void 0:l.technical)||50,strokeColor:w.getScoreColor(null===(o=w.result.scores)||void 0===o?void 0:o.technical),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(c=w.result.scores)||void 0===c?void 0:c.technical)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamental")))])],1),$("a-progress",{attrs:{percent:(null===(d=w.result.scores)||void 0===d?void 0:d.fundamental)||50,strokeColor:w.getScoreColor(null===(u=w.result.scores)||void 0===u?void 0:u.fundamental),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(m=w.result.scores)||void 0===m?void 0:m.fundamental)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentiment")))])],1),$("a-progress",{attrs:{percent:(null===(h=w.result.scores)||void 0===h?void 0:h.sentiment)||50,strokeColor:w.getScoreColor(null===(y=w.result.scores)||void 0===y?void 0:y.sentiment),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(p=w.result.scores)||void 0===p?void 0:p.sentiment)||50))])],1),$("div",{staticClass:"score-item overall"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"dashboard"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.overall")))])],1),$("a-progress",{attrs:{percent:(null===(v=w.result.scores)||void 0===v?void 0:v.overall)||50,strokeColor:w.getScoreColor(null===(f=w.result.scores)||void 0===f?void 0:f.overall),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(g=w.result.scores)||void 0===g?void 0:g.overall)||50))])],1)]),w.result.detailed_analysis?$("div",{staticClass:"detailed-analysis"},[w.result.detailed_analysis.technical?$("div",{staticClass:"analysis-card technical"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technicalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(b=w.result.scores)||void 0===b?void 0:b.technical)}},[w._v(" "+w._s((null===(_=w.result.scores)||void 0===_?void 0:_.technical)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.technical)+" ")])]):w._e(),w.result.detailed_analysis.fundamental?$("div",{staticClass:"analysis-card fundamental"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamentalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(k=w.result.scores)||void 0===k?void 0:k.fundamental)}},[w._v(" "+w._s((null===(C=w.result.scores)||void 0===C?void 0:C.fundamental)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.fundamental)+" ")])]):w._e(),w.result.detailed_analysis.sentiment?$("div",{staticClass:"analysis-card sentiment"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentimentAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(S=w.result.scores)||void 0===S?void 0:S.sentiment)}},[w._v(" "+w._s((null===(A=w.result.scores)||void 0===A?void 0:A.sentiment)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.sentiment)+" ")])]):w._e()]):w._e(),$("div",{staticClass:"analysis-details"},[$("div",{staticClass:"detail-section reasons"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.keyReasons")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.reasons,function(t,s){return $("li",{key:"r-"+s},[w._v(" "+w._s(t)+" ")])}),0)]),$("div",{staticClass:"detail-section risks"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.risks")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.risks,function(t,s){return $("li",{key:"k-"+s},[w._v(" "+w._s(t)+" ")])}),0)])]),w.result.indicators&&Object.keys(w.result.indicators).length>0?$("div",{staticClass:"indicators-section"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"stock"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.indicators")))])],1),$("div",{staticClass:"indicators-grid"},[w.result.indicators.rsi?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("RSI (14)")]),$("div",{staticClass:"indicator-value",class:w.getRsiClass(w.result.indicators.rsi.value)},[w._v(" "+w._s(w.formatNumber(w.result.indicators.rsi.value,1))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.rsi.signal)))])]):w._e(),w.result.indicators.macd?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("MACD")]),$("div",{staticClass:"indicator-value",class:"bullish"===w.result.indicators.macd.signal?"bullish":"bearish"===w.result.indicators.macd.signal?"bearish":""},[w._v(" "+w._s(w.translateTrend(w.result.indicators.macd.trend))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.macd.signal)))])]):w._e(),w.result.indicators.moving_averages?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.maTrend")))]),$("div",{staticClass:"indicator-value",class:w.getMaTrendClass(w.result.indicators.moving_averages.trend)},[w._v(" "+w._s(w.translateTrend(w.result.indicators.moving_averages.trend))+" ")])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.support")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.support)))])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.resistance")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.resistance)))])]):w._e(),w.result.indicators.volatility?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.volatility")))]),$("div",{staticClass:"indicator-value",class:w.getVolatilityClass(w.result.indicators.volatility.level)},[w._v(" "+w._s(w.translateVolatility(w.result.indicators.volatility.level))+" ("+w._s(w.result.indicators.volatility.pct)+"%) ")])]):w._e()])]):w._e(),$("div",{staticClass:"feedback-section"},[$("div",{staticClass:"feedback-question"},[w._v(w._s(w.$t("fastAnalysis.wasHelpful")))]),$("div",{staticClass:"feedback-buttons"},[$("a-button",{attrs:{type:"helpful"===w.userFeedback?"primary":"default",size:"small",loading:"helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("helpful")}}},[$("a-icon",{attrs:{type:"like"}}),w._v(" "+w._s(w.$t("fastAnalysis.helpful"))+" ")],1),$("a-button",{attrs:{type:"not_helpful"===w.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("not_helpful")}}},[$("a-icon",{attrs:{type:"dislike"}}),w._v(" "+w._s(w.$t("fastAnalysis.notHelpful"))+" ")],1)],1),$("div",{staticClass:"analysis-meta"},[$("span",[w._v(w._s(w.$t("fastAnalysis.analysisTime"))+": "+w._s(w.result.analysis_time_ms)+"ms")]),w.result.memory_id?$("span",[w._v("ID: #"+w._s(w.result.memory_id))]):w._e()])])]):$("div",{staticClass:"empty-container"},[$("div",{staticClass:"empty-content"},[$("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),$("div",{staticClass:"empty-title"},[w._v(w._s(w.$t("fastAnalysis.selectSymbol")))]),$("div",{staticClass:"empty-hint"},[w._v(w._s(w.$t("fastAnalysis.selectHint")))])],1)])])}),k=[],C={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,c.A)((0,c.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),s=this.elapsedSeconds%60;return"".concat(t,"m ").concat(s,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,s=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return s>=70?"#52c41a":s>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,s=null===(t=this.result)||void 0===t?void 0:t.consensus;return s&&"object"===(0,r.A)(s)?null==s.consensus_decision&&null==s.consensus_score?null:s:null},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s<1?s.toFixed(6):s<100?s.toFixed(4):s<1e4?s.toFixed(2):s.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a.toFixed(s)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?"--":s.toFixed(1)},formatAgreementPct:function(t){var s=Number(t);return Number.isNaN(s)?"--":"".concat(Math.round(100*s),"%")},formatProgress:function(t){var s=parseFloat(t)||0;return s%1===0?s.toFixed(0):s.toFixed(1)},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var s="fastAnalysis.signal.".concat(t),a=this.$t(s);return a===s?t:a},translateTrend:function(t){if(!t)return"--";var s="fastAnalysis.trend.".concat(t),a=this.$t(s);return a===s?t:a},translateVolatility:function(t){if(!t)return"--";var s="fastAnalysis.volatilityLevel.".concat(t),a=this.$t(s);return a===s?t:a},submitFeedback:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(null!==(e=s.result)&&void 0!==e&&e.memory_id){a.n=1;break}return s.$message.warning(s.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),a.a(2);case 1:return s.feedbackLoading=t,a.p=2,a.n=3,g({memory_id:s.result.memory_id,feedback:t});case 3:s.userFeedback=t,s.$message.success(s.$t("fastAnalysis.feedbackThanks")),a.n=5;break;case 4:a.p=4,a.v,s.$message.error(s.$t("fastAnalysis.feedbackFailed"));case 5:return a.p=5,s.feedbackLoading=null,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var s=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-s)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},S=C,A=a(845),w=(0,A.A)(S,_,k,!1,null,"693144f6",null),$=w.exports,T={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:$},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1}},computed:(0,c.A)((0,c.A)((0,c.A)({},(0,d.L8)(["userInfo"])),(0,d.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer)},methods:{filterSymbolOption:function(t,s){var a,e=(null===(a=s.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var s=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){s.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},loadMarketData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){return(0,l.A)().w(function(s){while(1)switch(s.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return s.a(2)}},s)}))()},loadSentimentData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingSentiment=!0,s.p=1,s.n=2,(0,b.EF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.fearGreed=(null===(e=a.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=a.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(r=a.data.dxy)||void 0===r?void 0:r.value)||null),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingIndices=!0,s.p=1,s.n=2,(0,b.yI)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.indices=a.data.indices||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingIndices=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingHeatmap=!0,s.p=1,s.n=2,(0,b.f$)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.heatmap={crypto:a.data.crypto||[],commodities:a.data.commodities||[],sectors:a.data.sectors||[],forex:a.data.forex||[]}),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingCalendar=!0,s.p=1,s.n=2,(0,b.kF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&(t.marketData.calendar=a.data||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(s)},getHeatmapStyle:function(t){var s=parseFloat(t)||0,a=Math.min(Math.abs(s)/5,1);return s>=0?{background:"rgba(34, 197, 94, ".concat(.15+.6*a,")"),color:s>2?"#fff":"#166534"}:{background:"rgba(239, 68, 68, ".concat(.15+.6*a,")"),color:s<-2?"#fff":"#991b1b"}},getCountryFlag:function(t){var s={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return s[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var s=new Date(t),a=new Date,e=new Date(a);if(e.setDate(e.getDate()+1),s.toDateString()===a.toDateString())return this.isZhLocale?"今天":"Today";if(s.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=s.getMonth()+1,r=s.getDate();return"".concat(i,"/").concat(r)}catch(n){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var s={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return s[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?String(t):Number.isInteger(s)?String(s):s.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,u.ug)();case 1:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data)),s.n=3;break;case 2:s.p=2,s.v;case 3:return s.a(2)}},s,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,o,d,u,m,h,y,v,f,g,b,_;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(!t.analyzing){s.n=1;break}return s.a(2);case 1:if(t.selectedSymbol){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),s.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",a=t.selectedSymbol.split(":"),e=(0,n.A)(a,2),i=e[0],r=e[1],o=t.$store.getters.lang||"zh-CN",s.p=3,s.n=4,p({market:i,symbol:r,language:o,timeframe:"1D"});case 4:if(d=s.v,!d||1!==d.code||!d.data){s.n=6;break}return u=(0,c.A)({},d.data),delete u.credits_charged,delete u.remaining_credits,t.analysisResult=u,m=d.data.remaining_credits,void 0!==m&&null!==m?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(m)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),s.n=5,t.refreshUserInfoFromServer();case 5:s.n=7;break;case 6:throw new Error((null===d||void 0===d?void 0:d.msg)||"分析失败");case 7:s.n=9;break;case 8:s.p=8,_=s.v,v=null===_||void 0===_||null===(h=_.response)||void 0===h?void 0:h.status,f=(null===_||void 0===_||null===(y=_.response)||void 0===y?void 0:y.data)||{},g=f.msg,b=f.data,429===v&&b&&b.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===v&&"Insufficient credits"===g?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===b||void 0===b?void 0:b.required),current:t.formatCreditNum(null===b||void 0===b?void 0:b.current),shortage:t.formatCreditNum(null===b||void 0===b?void 0:b.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=g||(null===_||void 0===_?void 0:_.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 9:return s.p=9,t.analyzing=!1,s.f(9);case 10:return s.a(2)}},s,null,[[3,8,9,10]])}))()},loadHistoryList:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.historyLoading=!0,s.p=1,s.n=2,v({page:t.historyPage,pagesize:t.historyPageSize});case 2:a=s.v,a&&1===a.code&&a.data&&(t.historyList=a.data.list||[],t.historyTotal=a.data.total||0),s.n=4;break;case 3:s.p=3,s.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return s.p=4,t.historyLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){return(0,l.A)().w(function(a){while(1)switch(a.n){case 0:if(!t.full_result){a.n=1;break}return s.analysisResult=t.full_result,s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1,a.a(2);case 1:s.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:.95*t.price,take_profit:1.05*t.price},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1;case 2:return a.a(2)}},a)}))()},deleteHistoryItem:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f(t.id);case 1:e=a.v,e&&1===e.code?(s.$message.success(s.$t("dashboard.analysis.message.deleteSuccess")),s.loadHistoryList()):s.$message.error((null===e||void 0===e?void 0:e.msg)||s.$t("dashboard.analysis.message.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,s.$message.error(s.$t("dashboard.analysis.message.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var s=new Date(1e3*t);return s.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var s=new Date(t);return s.toLocaleString("zh-CN")},getStatusColor:function(t){var s={pending:"orange",processing:"blue",completed:"green",failed:"red"};return s[t]||"default"},getStatusText:function(t){var s={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},a=s[t];return a?this.$t(a):t},loadUserInfo:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.loadingUserInfo=!0,s.p=1,!t.storeUserInfo||!t.storeUserInfo.email){s.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),s.a(2);case 2:return s.n=3,(0,u.ug)();case 3:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data),t.loadWatchlist()),s.n=5;break;case 4:s.p=4,s.v;case 5:return s.p=5,t.loadingUserInfo=!1,s.f(5);case 6:return s.a(2)}},s,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.userId){s.n=1;break}return s.a(2);case 1:return t.loadingWatchlist=!0,s.p=2,s.n=3,(0,m.Qo)({userid:t.userId});case 3:if(a=s.v,!a||1!==a.code||!a.data){s.n=4;break}return t.watchlist=a.data.map(function(t){return(0,c.A)((0,c.A)({},t),{},{price:0,change:0,changePercent:0})}),s.n=4,t.loadWatchlistPrices();case 4:s.n=6;break;case 5:s.p=5,s.v;case 6:return s.p=6,t.loadingWatchlist=!1,s.f(6);case 7:return s.a(2)}},s,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.watchlist&&0!==t.watchlist.length){s.n=1;break}return s.a(2);case 1:return s.p=1,a=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),s.n=2,(0,m.ms)({watchlist:a});case 2:e=s.v,e&&1===e.code&&e.data&&(i={},r={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,r["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=r,t.watchlist=t.watchlist.map(function(t){var s="".concat(t.market,"-").concat(t.symbol),a=i[s];return a?(0,c.A)((0,c.A)({},t),{},{price:a.price||0,change:a.change||0,changePercent:a.changePercent||0}):t})),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.a(2)}},s,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,n,o,c;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(a="",e="",i="",!t.selectedSymbolForAdd){s.n=1;break}a=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",s.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){s.n=3;break}if(t.selectedMarketTab){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:a=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",s.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),s.a(2);case 4:return t.addingStock=!0,s.p=5,s.n=6,(0,m.dp)({userid:t.userId,market:a,symbol:e,name:i});case 6:if(r=s.v,!r||1!==r.code){s.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),s.n=7,t.loadWatchlist();case 7:s.n=9;break;case 8:t.$message.error((null===r||void 0===r?void 0:r.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:s.n=11;break;case 10:s.p=10,c=s.v,o=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return s.p=11,t.addingStock=!1,s.f(11);case 12:return s.a(2)}},s,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var s=this,a=t.target.value;if(this.symbolSearchKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){s.searchSymbolsInModal(a)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return s.symbolSearchResults=[],s.hasSearched=!1,a.a(2);case 1:if(s.selectedMarketTab){a.n=2;break}return s.$message.warning(s.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:return s.searchingSymbols=!0,s.hasSearched=!0,a.p=3,a.n=4,(0,m._3)({market:s.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=a.v,e&&1===e.code&&e.data&&e.data.length>0?s.symbolSearchResults=e.data:(s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),a.n=6;break;case 5:a.p=5,a.v,s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return a.p=6,s.searchingSymbols=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=s.selectedMarketTab||(s.marketTypes.length>0?s.marketTypes[0].value:"")),t){a.n=1;break}return a.a(2);case 1:return s.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:e=a.v,e&&1===e.code&&e.data?s.hotSymbols=e.data:s.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,s.hotSymbols=[];case 5:return a.p=5,s.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var s=arguments,a=this;return(0,o.A)((0,l.A)().m(function e(){var i,n,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,r.A)(t)?t.symbol:t,n="object"===(0,r.A)(t)?t.market:s[1],e.p=2,e.n=3,(0,m.mk)({userid:a.userId,symbol:i,market:n});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return a.$message.success(a.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,a.loadWatchlist();case 4:e.n=6;break;case 5:a.$message.error((null===o||void 0===o?void 0:o.msg)||a.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,a.$message.error(a.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,m.iO)();case 1:a=s.v,a&&1===a.code&&a.data&&Array.isArray(a.data)?t.marketTypes=a.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],s.n=3;break;case 2:s.p=2,s.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return s.a(2)}},s,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var s=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){s.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},x=T,F=(0,A.A)(x,e,i,!1,null,"41eda137",null),M=F.exports},44146:function(t,s,a){a.d(s,{EF:function(){return o},f$:function(){return n},kF:function(){return l},r9:function(){return c},yI:function(){return r}});var e=a(75769),i="/api/global-market";function r(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function n(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},35038:function(t,s,a){a.d(s,{Qo:function(){return r},_3:function(){return d},dp:function(){return n},iO:function(){return c},mk:function(){return l},ms:function(){return o},z6:function(){return u}});var e=a(75769),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function n(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/158-legacy.0d4510be.js b/frontend/dist/js/127-legacy.18ffff11.js similarity index 99% rename from frontend/dist/js/158-legacy.0d4510be.js rename to frontend/dist/js/127-legacy.18ffff11.js index 0ac528f..4197d05 100644 --- a/frontend/dist/js/158-legacy.0d4510be.js +++ b/frontend/dist/js/127-legacy.18ffff11.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[158],{32158:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(62010);var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(76338),o=a(81127),s=a(56252),l=(a(28706),a(74423),a(62062),a(2892),a(26099),a(27495),a(21699),a(47764),a(62953),a(84841)),c=a(53003),d=a(42430),u=a(36911),p=a(55434),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,feature_costs:{}},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,h=a(845),g=(0,h.A)(m,r,i,!1,null,"86a53e9c",null),v=g.exports},42430:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(76338),i=a(75769),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},53003:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});a(76338);var r=a(75769);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},84841:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return h},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return g}});var r=a(75769);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[127],{16127:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(62010);var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(76338),o=a(81127),s=a(56252),l=(a(28706),a(74423),a(62062),a(2892),a(26099),a(27495),a(21699),a(47764),a(62953),a(84841)),c=a(53003),d=a(42430),u=a(36911),p=a(55434),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,feature_costs:{}},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,h=a(845),g=(0,h.A)(m,r,i,!1,null,"6dceb76a",null),v=g.exports},42430:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(76338),i=a(75769),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},53003:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});a(76338);var r=a(75769);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},84841:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return h},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return g}});var r=a(75769);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/55-legacy.e43a5f53.js b/frontend/dist/js/18-legacy.852f0d29.js similarity index 99% rename from frontend/dist/js/55-legacy.e43a5f53.js rename to frontend/dist/js/18-legacy.852f0d29.js index de99d2e..9b2bb8b 100644 --- a/frontend/dist/js/55-legacy.e43a5f53.js +++ b/frontend/dist/js/18-legacy.852f0d29.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[55],{58055:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"0cdd5f9c",null),b=_.exports}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[18],{28018:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"714c882a",null),b=_.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/55.8272df87.js b/frontend/dist/js/18.250f1bfe.js similarity index 98% rename from frontend/dist/js/55.8272df87.js rename to frontend/dist/js/18.250f1bfe.js index ff3733c..e1fce58 100644 --- a/frontend/dist/js/55.8272df87.js +++ b/frontend/dist/js/18.250f1bfe.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[55],{58055:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"0cdd5f9c",null),b=_.exports}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[18],{28018:function(t,s,i){i.r(s),i.d(s,{default:function(){return b}});var a=function(){var t=this,s=t._self._c;return s("div",{staticClass:"billing-page",class:{"theme-dark":t.isDarkTheme}},[s("div",{staticClass:"page-header"},[s("h2",{staticClass:"page-title"},[s("a-icon",{attrs:{type:"wallet"}}),s("span",[t._v(t._s(t.$t("billing.title")))])],1),s("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("billing.desc")))])]),s("a-card",{staticClass:"snapshot-card",attrs:{bordered:!1}},[s("div",{staticClass:"snapshot-row"},[s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.credits")))]),s("div",{staticClass:"snap-value"},[t._v(t._s(t.formatCredits(t.billing.credits)))])]),s("div",{staticClass:"snap-item"},[s("div",{staticClass:"snap-label"},[t._v(t._s(t.$t("billing.snapshot.vip")))]),s("div",{staticClass:"snap-value"},[t.billing.is_vip?s("a-tag",{attrs:{color:"gold"}},[s("a-icon",{attrs:{type:"crown"}}),t._v(" VIP ")],1):s("a-tag",[t._v(t._s(t.$t("billing.snapshot.notVip")))]),t.billing.vip_expires_at?s("span",{staticClass:"vip-exp"},[t._v(" "+t._s(t.$t("billing.snapshot.expires"))+": "+t._s(t.formatDate(t.billing.vip_expires_at))+" ")]):t._e()],1)])]),s("a-alert",{staticStyle:{"margin-top":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("billing.vipRule.title"),description:t.$t("billing.vipRule.desc")}})],1),s("a-row",{staticStyle:{"margin-top":"16px"},attrs:{gutter:16}},[s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.monthly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.monthly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perMonth")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.monthly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"monthly"===t.purchasing},on:{click:function(s){return t.buy("monthly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card highlight",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.yearly")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.yearly.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v("/ "+t._s(t.$t("billing.perYear")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" +"+t._s(t.plans.yearly.credits_once)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"yearly"===t.purchasing},on:{click:function(s){return t.buy("yearly")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1),s("a-col",{attrs:{xs:24,md:8}},[s("a-card",{staticClass:"plan-card",attrs:{bordered:!1}},[s("div",{staticClass:"plan-title"},[t._v(t._s(t.$t("billing.plan.lifetime")))]),s("div",{staticClass:"plan-price"},[t._v(" $"+t._s(t.plans.lifetime.price_usd)+" "),s("span",{staticClass:"plan-unit"},[t._v(t._s(t.$t("billing.once")))])]),s("div",{staticClass:"plan-benefit"},[t._v(" "+t._s(t.$t("billing.lifetimeMonthly"))+" +"+t._s(t.plans.lifetime.credits_monthly)+" "+t._s(t.$t("billing.credits"))+" ")]),s("a-button",{attrs:{type:"primary",block:"",loading:"lifetime"===t.purchasing},on:{click:function(s){return t.buy("lifetime")}}},[t._v(" "+t._s(t.$t("billing.buyNow"))+" ")])],1)],1)],1),s("a-modal",{attrs:{title:null,footer:null,maskClosable:!1,closable:!1,wrapClassName:"usdt-pay-modal-wrap",width:"600px"},on:{cancel:t.closeUsdtModal},model:{value:t.usdtModalVisible,callback:function(s){t.usdtModalVisible=s},expression:"usdtModalVisible"}},[t.usdtOrder?s("div",{staticClass:"usdt-checkout"},[s("div",{staticClass:"checkout-header"},[s("div",{staticClass:"header-left"},[s("div",{staticClass:"usdt-logo"},[s("svg",{attrs:{viewBox:"0 0 32 32",width:"28",height:"28"}},[s("circle",{attrs:{cx:"16",cy:"16",r:"16",fill:"#26A17B"}}),s("path",{attrs:{d:"M17.9 17.9v-.003c-.1.008-.6.04-1.8.04-1 0-1.5-.028-1.7-.04v.004c-3.4-.15-5.9-.74-5.9-1.44 0-.7 2.5-1.29 5.9-1.44v2.3c.2.013.7.05 1.7.05 1.2 0 1.6-.04 1.8-.05v-2.3c3.4.15 5.9.74 5.9 1.44 0 .7-2.5 1.29-5.9 1.44zm0-3.12V12.7h5v-2.4H9.2v2.4h5v2.08c-3.8.18-6.7.93-6.7 1.83s2.9 1.65 6.7 1.83v6.56h3.6v-6.56c3.8-.18 6.7-.93 6.7-1.83s-2.8-1.65-6.6-1.83z",fill:"#fff"}})])]),s("div",{staticClass:"header-text"},[s("div",{staticClass:"header-title"},[t._v(t._s(t.$t("billing.usdt.title")))]),s("div",{staticClass:"header-desc"},[t._v(t._s(t.$t("billing.usdt.hintDesc")))])])]),s("a-button",{staticClass:"close-btn",attrs:{type:"link"},on:{click:t.closeUsdtModal}},[s("a-icon",{attrs:{type:"close"}})],1)],1),s("div",{staticClass:"checkout-steps"},t._l(t.stepItems,function(i,a){return s("div",{key:a,staticClass:"step-item",class:{active:a<=t.usdtStepCurrent,current:a===t.usdtStepCurrent}},[s("div",{staticClass:"step-dot"},[s("span",{staticClass:"dot-inner"}),a===t.usdtStepCurrent&&"pending"===t.usdtOrder.status?s("span",{staticClass:"dot-pulse"}):t._e()]),s("span",{staticClass:"step-label"},[t._v(t._s(i))]),a1&&void 0!==arguments[1])||arguments[1];return(0,c.Ay)({url:o.UsdtOrder(t),method:"get",params:{refresh:s?1:0}})}var g={name:"BillingPage",computed:(0,n.A)((0,n.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},usdtQrUrl:function(){var t=this.getUsdtQrText();return t?"https://api.qrserver.com/v1/create-qr-code/?size=220x220&data=".concat(encodeURIComponent(t)):""},statusText:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"",s={pending:this.$t("billing.usdt.status.pending"),paid:this.$t("billing.usdt.status.paid"),confirmed:this.$t("billing.usdt.status.confirmed"),expired:this.$t("billing.usdt.status.expired"),cancelled:this.$t("billing.usdt.status.cancelled"),failed:this.$t("billing.usdt.status.failed")};return s[t]||t||"--"},statusColor:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?"green":"paid"===t?"blue":"expired"===t||"failed"===t||"cancelled"===t?"red":"orange"},usdtStepCurrent:function(){var t=this.usdtOrder&&this.usdtOrder.status?String(this.usdtOrder.status):"";return"confirmed"===t?2:"paid"===t?1:0},stepItems:function(){return[this.$t("billing.usdt.status.pending"),this.$t("billing.usdt.status.paid"),this.$t("billing.usdt.status.confirmed")]}}),data:function(){return{loading:!1,purchasing:"",usdtModalVisible:!1,usdtOrder:null,usdtPollingTimer:null,usdtRefreshing:!1,billing:{credits:0,is_vip:!1,vip_expires_at:null},plans:{monthly:{price_usd:19.9,credits_once:500},yearly:{price_usd:199,credits_once:8e3},lifetime:{price_usd:499,credits_monthly:800}}}},created:function(){this.load()},beforeDestroy:function(){this.stopUsdtPolling()},methods:{load:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a,e;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loading=!0,s.p=1,s.n=2,u();case 2:i=s.v,i&&1===i.code&&i.data?(t.plans=i.data.plans||t.plans,t.billing=i.data.billing||t.billing):t.$message.error((null===i||void 0===i?void 0:i.msg)||"Load failed"),s.n=4;break;case 3:s.p=3,e=s.v,t.$message.error((null===e||void 0===e||null===(a=e.response)||void 0===a||null===(a=a.data)||void 0===a?void 0:a.msg)||"Load failed");case 4:return s.p=4,t.loading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){return t?new Date(t).toLocaleDateString():""},buy:function(t){var s=this;return(0,l.A)((0,r.A)().m(function i(){var a,e,l;return(0,r.A)().w(function(i){while(1)switch(i.p=i.n){case 0:return s.purchasing=t,i.p=1,i.n=2,p(t);case 2:a=i.v,a&&1===a.code&&a.data?(s.usdtOrder=a.data,s.usdtModalVisible=!0,s.startUsdtPolling()):s.$message.error((null===a||void 0===a?void 0:a.msg)||s.$t("billing.purchaseFailed")),i.n=4;break;case 3:i.p=3,l=i.v,s.$message.error((null===l||void 0===l||null===(e=l.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||s.$t("billing.purchaseFailed"));case 4:return i.p=4,s.purchasing="",i.f(4);case 5:return i.a(2)}},i,null,[[1,3,4,5]])}))()},getUsdtQrText:function(){return this.usdtOrder&&this.usdtOrder.address||""},copyText:function(t){try{var s=String(t||"");if(!s)return;this.$copyText(s),this.$message.success(this.$t("common.copySuccess")||"Copied")}catch(i){this.$message.error(this.$t("common.copyFailed")||"Copy failed")}},formatDateTime:function(t){return t?new Date(t).toLocaleString():""},refreshUsdtOrder:function(){var t=this;return(0,l.A)((0,r.A)().m(function s(){var i,a;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.usdtOrder&&t.usdtOrder.order_id){s.n=1;break}return s.a(2);case 1:return t.usdtRefreshing=!0,s.p=2,s.n=3,v(t.usdtOrder.order_id,!0);case 3:if(i=s.v,!i||1!==i.code||!i.data){s.n=6;break}if(t.usdtOrder=i.data,a=t.usdtOrder.status,"confirmed"!==a){s.n=5;break}return t.$message.success(t.$t("billing.usdt.paidSuccess")),t.stopUsdtPolling(),s.n=4,t.load();case 4:s.n=6;break;case 5:"expired"!==a&&"failed"!==a&&"cancelled"!==a||t.stopUsdtPolling();case 6:s.n=8;break;case 7:s.p=7,s.v;case 8:return s.p=8,t.usdtRefreshing=!1,s.f(8);case 9:return s.a(2)}},s,null,[[2,7,8,9]])}))()},startUsdtPolling:function(){var t=this;this.stopUsdtPolling(),this.usdtPollingTimer=setInterval(function(){t.refreshUsdtOrder()},5e3)},stopUsdtPolling:function(){this.usdtPollingTimer&&(clearInterval(this.usdtPollingTimer),this.usdtPollingTimer=null)},closeUsdtModal:function(){this.usdtModalVisible=!1,this.stopUsdtPolling()}}},h=g,m=i(845),_=(0,m.A)(h,a,e,!1,null,"714c882a",null),b=_.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/206.aa57506d.js b/frontend/dist/js/206.aa57506d.js new file mode 100644 index 0000000..04ce760 --- /dev/null +++ b/frontend/dist/js/206.aa57506d.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[206],{85206:function(t,a,e){e.r(a),e.d(a,{default:function(){return _}});var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"dashboard-pro",class:{"theme-dark":t.isDarkTheme}},[a("div",{staticClass:"kpi-grid"},[a("div",{staticClass:"kpi-card kpi-primary"},[a("div",{staticClass:"kpi-glow"}),a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalEquity")))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"currency"},[t._v("$")]),a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_equity)))])]),a("div",{staticClass:"kpi-sub"},[a("span",{class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(81127),i=e(56252),o=e(57532),l=e(2403),d=e(76338),c=(e(74423),e(15014)),u=e(75769),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n
\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"7ff4e505",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/829.17bfab9d.js b/frontend/dist/js/221.965c8579.js similarity index 99% rename from frontend/dist/js/829.17bfab9d.js rename to frontend/dist/js/221.965c8579.js index d8b0cb3..d6fef97 100644 --- a/frontend/dist/js/829.17bfab9d.js +++ b/frontend/dist/js/221.965c8579.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[829],{99829:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(76338),o=a(81127),s=a(56252),l=(a(74423),a(84841)),c=a(53003),d=a(42430),u=a(36911),p=a(55434),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,feature_costs:{}},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,h=a(845),g=(0,h.A)(m,r,i,!1,null,"86a53e9c",null),v=g.exports},42430:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(76338),i=a(75769),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},53003:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});var r=a(75769);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},84841:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return h},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return g}});var r=a(75769);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[221],{18221:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var r=function(){var e=this,t=e._self._c;return t("div",{staticClass:"profile-page",class:{"theme-dark":e.isDarkTheme}},[t("div",{staticClass:"page-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"user"}}),t("span",[e._v(e._s(e.$t("profile.title")||"My Profile"))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("profile.description")||"Manage your account settings and preferences"))])]),t("a-row",{staticClass:"profile-cards-row",attrs:{gutter:24}},[t("a-col",{staticClass:"profile-card-col",attrs:{xs:24,md:8}},[t("a-card",{staticClass:"profile-card",attrs:{bordered:!1}},[t("div",{staticClass:"avatar-section"},[t("a-avatar",{attrs:{size:100,src:e.profile.avatar||"/avatar2.jpg"}}),t("h3",{staticClass:"username"},[e._v(e._s(e.profile.nickname||e.profile.username))]),t("p",{staticClass:"user-role"},[t("a-tag",{attrs:{color:e.getRoleColor(e.profile.role)}},[e._v(" "+e._s(e.getRoleLabel(e.profile.role))+" ")]),e.isVip?t("a-tag",{attrs:{color:"gold"}},[t("a-icon",{attrs:{type:"crown"}}),e._v(" VIP ")],1):e._e()],1)],1),t("a-divider"),t("div",{staticClass:"profile-info"},[t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"user"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.username")||"Username")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.username))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"mail"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.email")||"Email")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.profile.email||"-"))])],1),t("div",{staticClass:"info-item"},[t("a-icon",{attrs:{type:"calendar"}}),t("span",{staticClass:"label"},[e._v(e._s(e.$t("profile.lastLogin")||"Last Login")+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.formatTime(e.profile.last_login_at)||"-"))])],1)])],1)],1),t("a-col",{staticClass:"right-cards-col",attrs:{xs:24,md:16}},[t("a-row",{staticClass:"right-cards-row",attrs:{gutter:16}},[t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"credits-card",attrs:{bordered:!1}},[t("div",{staticClass:"credits-header"},[t("h3",{staticClass:"credits-title"},[t("a-icon",{attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("profile.credits.title")||"我的积分")+" ")],1)]),t("div",{staticClass:"credits-body"},[t("div",{staticClass:"credits-amount"},[t("span",{staticClass:"amount-value"},[e._v(e._s(e.formatCredits(e.billing.credits)))]),t("span",{staticClass:"amount-label"},[e._v(e._s(e.$t("profile.credits.unit")||"积分"))])]),e.billing.vip_expires_at?t("div",{staticClass:"vip-status"},[t("a-icon",{style:{color:e.isVip?"#faad14":"#999"},attrs:{type:"crown"}}),e.isVip?t("span",{staticClass:"vip-active"},[e._v(" "+e._s(e.$t("profile.credits.vipExpires")||"VIP有效期至")+": "+e._s(e.formatDate(e.billing.vip_expires_at))+" ")]):t("span",{staticClass:"vip-expired"},[e._v(" "+e._s(e.$t("profile.credits.vipExpired")||"VIP已过期")+" ")])],1):e.billing.is_vip?e._e():t("div",{staticClass:"vip-status"},[t("span",{staticClass:"no-vip"},[e._v(e._s(e.$t("profile.credits.noVip")||"非VIP用户"))])])]),t("a-divider"),t("div",{staticClass:"credits-actions"},[t("a-button",{attrs:{type:"primary",icon:"shopping"},on:{click:e.handleRecharge}},[e._v(" "+e._s(e.$t("profile.credits.recharge")||"开通/充值")+" ")])],1),e.billing.billing_enabled?t("div",{staticClass:"credits-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.credits.hint")||"使用AI分析/回测/监控等功能会消耗积分;VIP仅可免费使用VIP免费指标。"))])],1):e._e()],1)],1),t("a-col",{attrs:{xs:24,md:12}},[t("a-card",{staticClass:"referral-card",attrs:{bordered:!1}},[t("div",{staticClass:"referral-header"},[t("h3",{staticClass:"referral-title"},[t("a-icon",{attrs:{type:"team"}}),e._v(" "+e._s(e.$t("profile.referral.title")||"邀请好友")+" ")],1)]),t("div",{staticClass:"referral-body"},[t("div",{staticClass:"referral-stats"},[t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v(e._s(e.referralData.total||0))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.totalInvited")||"已邀请"))])]),e.referralData.referral_bonus>0?t("div",{staticClass:"stat-item"},[t("span",{staticClass:"stat-value"},[e._v("+"+e._s(e.referralData.referral_bonus))]),t("span",{staticClass:"stat-label"},[e._v(e._s(e.$t("profile.referral.bonusPerInvite")||"每邀请获得"))])]):e._e()]),t("a-divider",{staticStyle:{margin:"12px 0"}}),t("div",{staticClass:"referral-link-section"},[t("div",{staticClass:"link-label"},[e._v(e._s(e.$t("profile.referral.yourLink")||"您的邀请链接"))]),t("div",{staticClass:"link-box"},[t("a-input",{attrs:{value:e.referralLink,readonly:"",size:"small"}},[t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.referral.copyLink")||"复制链接"},slot:"suffix"},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{type:"copy"},on:{click:e.copyReferralLink}})],1)],1)],1)]),e.referralData.register_bonus>0?t("div",{staticClass:"referral-hint"},[t("a-icon",{attrs:{type:"gift"}}),t("span",[e._v(e._s(e.$t("profile.referral.newUserBonus")||"新用户注册获得")+" "+e._s(e.referralData.register_bonus)+" "+e._s(e.$t("profile.credits.unit")||"积分"))])],1):e._e()],1)])],1)],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"24px"},attrs:{gutter:24}},[t("a-col",{attrs:{xs:24}},[t("a-card",{staticClass:"edit-card",attrs:{bordered:!1}},[t("a-tabs",{model:{value:e.activeTab,callback:function(t){e.activeTab=t},expression:"activeTab"}},[t("a-tab-pane",{key:"basic",attrs:{tab:e.$t("profile.basicInfo")||"Basic Info"}},[t("a-form",{staticClass:"profile-form",attrs:{form:e.profileForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.nickname")||"Nickname"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname",{initialValue:e.profile.nickname}],expression:"['nickname', { initialValue: profile.nickname }]"}],attrs:{placeholder:e.$t("profile.nicknamePlaceholder")||"Enter your nickname"}},[t("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.email")||"Email"}},[t("a-input",{attrs:{value:e.profile.email||"-",disabled:""}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"}),t("a-tooltip",{attrs:{slot:"suffix",title:e.$t("profile.emailCannotChange")||"Email cannot be changed after registration"},slot:"suffix"},[t("a-icon",{staticStyle:{color:"rgba(0,0,0,.45)"},attrs:{type:"info-circle"}})],1)],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSaveProfile}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"Save")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"password",attrs:{tab:e.$t("profile.changePassword")||"Change Password"}},[t("a-form",{staticClass:"password-form",attrs:{form:e.passwordForm,layout:"vertical"}},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.passwordHintNew")||"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.",type:"info",showIcon:""}}),t("a-form-item",{attrs:{label:e.$t("profile.verificationCode")||"Verification Code"}},[t("a-row",{attrs:{gutter:12}},[t("a-col",{attrs:{span:16}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["code",{rules:[{required:!0,message:e.$t("profile.codeRequired")||"Please enter verification code"}]}],expression:"['code', {\n rules: [{ required: true, message: $t('profile.codeRequired') || 'Please enter verification code' }]\n }]"}],attrs:{placeholder:e.$t("profile.codePlaceholder")||"Enter verification code"}},[t("a-icon",{attrs:{slot:"prefix",type:"safety-certificate"},slot:"prefix"})],1)],1),t("a-col",{attrs:{span:8}},[t("a-button",{attrs:{block:"",loading:e.sendingPwdCode,disabled:e.sendingPwdCode||e.pwdCodeCountdown>0||!e.profile.email},on:{click:e.handleSendPwdCode}},[e._v(" "+e._s(e.pwdCodeCountdown>0?"".concat(e.pwdCodeCountdown,"s"):e.$t("profile.sendCode")||"Send Code")+" ")])],1)],1),e.profile.email?t("div",{staticClass:"email-hint"},[e._v(" "+e._s(e.$t("profile.codeWillSendTo")||"Code will be sent to")+": "+e._s(e.profile.email)+" ")]):t("div",{staticClass:"email-hint email-warning"},[e._v(" "+e._s(e.$t("profile.noEmailWarning")||"Please set your email first in Basic Info tab")+" ")])],1),t("a-form-item",{attrs:{label:e.$t("profile.newPassword")||"New Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:e.$t("profile.newPasswordRequired")||"Please enter new password"},{validator:e.validateNewPassword}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('profile.newPasswordRequired') || 'Please enter new password' },\n { validator: validateNewPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.newPasswordPlaceholder")||"Enter new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.confirmPassword")||"Confirm Password"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["confirm_password",{rules:[{required:!0,message:e.$t("profile.confirmPasswordRequired")||"Please confirm password"},{validator:e.validateConfirmPassword}]}],expression:"['confirm_password', {\n rules: [\n { required: true, message: $t('profile.confirmPasswordRequired') || 'Please confirm password' },\n { validator: validateConfirmPassword }\n ]\n }]"}],attrs:{placeholder:e.$t("profile.confirmPasswordPlaceholder")||"Confirm new password"}},[t("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.changingPassword,disabled:!e.profile.email},on:{click:e.handleChangePassword}},[t("a-icon",{attrs:{type:"key"}}),e._v(" "+e._s(e.$t("profile.changePassword")||"Change Password")+" ")],1)],1)],1)],1),t("a-tab-pane",{key:"credits",attrs:{tab:e.$t("profile.creditsLog")||"消费记录"}},[t("a-table",{attrs:{columns:e.creditsLogColumns,dataSource:e.creditsLog,loading:e.creditsLogLoading,pagination:e.creditsLogPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleCreditsLogChange},scopedSlots:e._u([{key:"action",fn:function(a){return[t("a-tag",{attrs:{color:e.getActionColor(a)}},[e._v(" "+e._s(e.getActionLabel(a))+" ")])]}},{key:"amount",fn:function(a){return[t("span",{class:a>=0?"amount-positive":"amount-negative"},[e._v(" "+e._s(a>=0?"+":"")+e._s(a)+" ")])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])})],1),t("a-tab-pane",{key:"notifications",attrs:{tab:e.$t("profile.notifications.title")||"通知设置"}},[t("div",{staticClass:"notification-settings-form"},[t("a-alert",{staticStyle:{"margin-bottom":"24px"},attrs:{message:e.$t("profile.notifications.hint")||"配置您的默认通知方式,在创建资产监控和预警时将自动使用这些设置",type:"info",showIcon:""}}),t("a-form",{staticStyle:{"max-width":"600px"},attrs:{form:e.notificationForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.notifications.defaultChannels")||"默认通知渠道"}},[t("a-checkbox-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["default_channels",{initialValue:e.notificationSettings.default_channels||["browser"]}],expression:"['default_channels', { initialValue: notificationSettings.default_channels || ['browser'] }]"}]},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"browser"}},[t("a-icon",{attrs:{type:"bell"}}),e._v(" "+e._s(e.$t("profile.notifications.browser")||"站内通知")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"telegram"}},[t("a-icon",{attrs:{type:"send"}}),e._v(" Telegram ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"email"}},[t("a-icon",{attrs:{type:"mail"}}),e._v(" "+e._s(e.$t("profile.notifications.email")||"邮件")+" ")],1)],1)],1),t("a-row",{staticStyle:{"margin-top":"8px"},attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"phone"}},[t("a-icon",{attrs:{type:"phone"}}),e._v(" "+e._s(e.$t("profile.notifications.phone")||"短信")+" ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"discord"}},[t("a-icon",{attrs:{type:"message"}}),e._v(" Discord ")],1)],1),t("a-col",{attrs:{span:8}},[t("a-checkbox",{attrs:{value:"webhook"}},[t("a-icon",{attrs:{type:"api"}}),e._v(" Webhook ")],1)],1)],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramBotToken")||"Telegram Bot Token"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_bot_token",{initialValue:e.notificationSettings.telegram_bot_token}],expression:"['telegram_bot_token', { initialValue: notificationSettings.telegram_bot_token }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramBotTokenPlaceholder")||"请输入您的 Telegram Bot Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"robot"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(" "+e._s(e.$t("profile.notifications.telegramBotTokenHint")||"通过 @BotFather 创建机器人获取 Token")+" "),t("a",{attrs:{href:"https://t.me/BotFather",target:"_blank",rel:"noopener noreferrer"}},[e._v("@BotFather")])])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.telegramChatId")||"Telegram Chat ID"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["telegram_chat_id",{initialValue:e.notificationSettings.telegram_chat_id}],expression:"['telegram_chat_id', { initialValue: notificationSettings.telegram_chat_id }]"}],attrs:{placeholder:e.$t("profile.notifications.telegramPlaceholder")||"请输入您的 Telegram Chat ID(如 123456789)"}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.telegramHint")||"发送 /start 给 @userinfobot 可获取您的 Chat ID"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.notifyEmail")||"通知邮箱"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{initialValue:e.notificationSettings.email||e.profile.email}],expression:"['email', { initialValue: notificationSettings.email || profile.email }]"}],attrs:{placeholder:e.$t("profile.notifications.emailPlaceholder")||"接收通知的邮箱地址"}},[t("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.emailHint")||"默认使用账户邮箱,可设置其他邮箱接收通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.phone")||"手机号(短信通知)"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["phone",{initialValue:e.notificationSettings.phone}],expression:"['phone', { initialValue: notificationSettings.phone }]"}],attrs:{placeholder:e.$t("profile.notifications.phonePlaceholder")||"请输入手机号(如 +8613800138000)"}},[t("a-icon",{attrs:{slot:"prefix",type:"phone"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.phoneHint")||"需要管理员配置 Twilio 服务后才能使用短信通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.discordWebhook")||"Discord Webhook"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["discord_webhook",{initialValue:e.notificationSettings.discord_webhook}],expression:"['discord_webhook', { initialValue: notificationSettings.discord_webhook }]"}],attrs:{placeholder:e.$t("profile.notifications.discordPlaceholder")||"https://discord.com/api/webhooks/..."}},[t("a-icon",{attrs:{slot:"prefix",type:"message"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.discordHint")||"在 Discord 服务器设置中创建 Webhook"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookUrl")||"Webhook URL"}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_url",{initialValue:e.notificationSettings.webhook_url}],expression:"['webhook_url', { initialValue: notificationSettings.webhook_url }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookPlaceholder")||"https://your-server.com/webhook"}},[t("a-icon",{attrs:{slot:"prefix",type:"api"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookHint")||"自定义 Webhook 地址,将以 POST JSON 方式推送通知"))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.notifications.webhookToken")||"Webhook Token(可选)"}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["webhook_token",{initialValue:e.notificationSettings.webhook_token}],expression:"['webhook_token', { initialValue: notificationSettings.webhook_token }]"}],attrs:{placeholder:e.$t("profile.notifications.webhookTokenPlaceholder")||"用于验证请求的 Bearer Token"}},[t("a-icon",{attrs:{slot:"prefix",type:"key"},slot:"prefix"})],1),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.notifications.webhookTokenHint")||"将作为 Authorization: Bearer Token 发送到 Webhook"))])],1)],1),t("a-form-item",[t("a-button",{attrs:{type:"primary",loading:e.savingNotifications},on:{click:e.handleSaveNotifications}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("common.save")||"保存")+" ")],1),t("a-button",{staticStyle:{"margin-left":"12px"},attrs:{loading:e.testingNotification},on:{click:e.handleTestNotification}},[t("a-icon",{attrs:{type:"experiment"}}),e._v(" "+e._s(e.$t("profile.notifications.testBtn")||"发送测试通知")+" ")],1)],1)],1)],1)]),t("a-tab-pane",{key:"exchange",attrs:{tab:e.$t("profile.exchange.title")||"交易所配置"}},[t("div",{staticClass:"exchange-config-section"},[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:e.$t("profile.exchange.hint"),type:"info",showIcon:""}}),t("div",{staticStyle:{"margin-bottom":"16px","text-align":"right"}},[t("a-button",{attrs:{type:"primary",icon:"plus"},on:{click:function(t){e.showAddExchangeModal=!0}}},[e._v(" "+e._s(e.$t("profile.exchange.addAccount"))+" ")])],1),t("a-table",{attrs:{columns:e.exchangeColumns,dataSource:e.exchangeCredentials,loading:e.exchangeLoading,rowKey:function(e){return e.id},size:"small"},scopedSlots:e._u([{key:"exchange_id",fn:function(a){return[t("span",{staticStyle:{"text-transform":"capitalize","font-weight":"500"}},[e._v(e._s(e.getExchangeDisplayName(a)))])]}},{key:"api_key_hint",fn:function(a,r){return[t("span",{staticClass:"credential-hint"},[e._v(e._s(a||r.name||"-"))])]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}},{key:"action",fn:function(a,r){return[t("a-popconfirm",{attrs:{title:e.$t("profile.exchange.deleteConfirm"),okText:e.$t("common.confirm"),cancelText:e.$t("common.cancel")},on:{confirm:function(t){return e.handleDeleteCredential(r.id)}}},[t("a-button",{attrs:{type:"danger",size:"small",ghost:"",icon:"delete"}},[e._v(" "+e._s(e.$t("common.delete"))+" ")])],1)]}}])}),e.exchangeLoading||0!==e.exchangeCredentials.length?e._e():t("a-empty",{staticStyle:{"margin-top":"20px"}},[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.exchange.noAccounts")))])])],1)]),t("a-tab-pane",{key:"referrals",attrs:{tab:e.$t("profile.referral.listTab")||"邀请列表"}},[t("a-table",{attrs:{columns:e.referralColumns,dataSource:e.referralData.list||[],loading:e.referralLoading,pagination:e.referralPagination,rowKey:function(e){return e.id},size:"small"},on:{change:e.handleReferralChange},scopedSlots:e._u([{key:"user",fn:function(a,r){return[t("div",{staticClass:"referral-user-cell"},[t("a-avatar",{attrs:{size:32,src:r.avatar||"/avatar2.jpg"}}),t("div",{staticClass:"user-info"},[t("span",{staticClass:"nickname"},[e._v(e._s(r.nickname||r.username))]),t("span",{staticClass:"username"},[e._v("@"+e._s(r.username))])])],1)]}},{key:"created_at",fn:function(t){return[e._v(" "+e._s(e.formatTime(t))+" ")]}}])}),e.referralLoading||e.referralData.list&&0!==e.referralData.list.length?e._e():t("a-empty",[t("span",{attrs:{slot:"description"},slot:"description"},[e._v(e._s(e.$t("profile.referral.noReferrals")||"暂无邀请记录"))]),t("a-button",{attrs:{type:"primary"},on:{click:e.copyReferralLink}},[e._v(" "+e._s(e.$t("profile.referral.shareNow")||"立即分享邀请")+" ")])],1)],1)],1)],1)],1)],1),t("a-modal",{attrs:{title:e.$t("profile.exchange.addTitle"),visible:e.showAddExchangeModal,confirmLoading:e.savingExchange,okText:e.$t("common.save"),cancelText:e.$t("common.cancel"),maskClosable:!1,width:"520px"},on:{ok:e.handleSaveExchange,cancel:function(t){e.showAddExchangeModal=!1}}},[t("a-form",{attrs:{form:e.exchangeForm,layout:"vertical"}},[t("a-form-item",{attrs:{label:e.$t("profile.exchange.selectExchange")}},[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["exchange_id",{rules:[{required:!0,message:e.$t("profile.exchange.selectExchange")}]}],expression:"['exchange_id', { rules: [{ required: true, message: $t('profile.exchange.selectExchange') }] }]"}],attrs:{placeholder:e.$t("profile.exchange.selectExchange")},on:{change:e.handleExchangeTypeChange}},[t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeCrypto")}},e._l(e.cryptoExchangeList,function(a){return t("a-select-option",{key:a.id,attrs:{value:a.id}},[e._v(" "+e._s(a.name)+" ")])}),1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeIBKR")}},[t("a-select-option",{attrs:{value:"ibkr"}},[e._v("Interactive Brokers (IBKR)")])],1),t("a-select-opt-group",{attrs:{label:e.$t("profile.exchange.typeMT5")}},[t("a-select-option",{attrs:{value:"mt5"}},[e._v("MetaTrader 5")])],1)],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.accountName")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name"],expression:"['name']"}],attrs:{placeholder:e.$t("profile.exchange.accountNamePlaceholder")}})],1),"crypto"===e.addExchangeType?[t("a-form-item",{attrs:{label:e.$t("profile.exchange.apiKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["api_key",{rules:[{required:!0,message:"API Key is required"}]}],expression:"['api_key', { rules: [{ required: true, message: 'API Key is required' }] }]"}],attrs:{placeholder:"API Key",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.secretKey")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["secret_key",{rules:[{required:!0,message:"Secret Key is required"}]}],expression:"['secret_key', { rules: [{ required: true, message: 'Secret Key is required' }] }]"}],attrs:{placeholder:"Secret Key",autocomplete:"new-password"}})],1),e.addExchangeNeedsPassphrase?t("a-form-item",{attrs:{label:e.$t("profile.exchange.passphrase")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["passphrase"],expression:"['passphrase']"}],attrs:{placeholder:"Passphrase",autocomplete:"new-password"}})],1):e._e(),e.addExchangeShowDemo?t("a-form-item",[t("a-checkbox",{directives:[{name:"decorator",rawName:"v-decorator",value:["enable_demo_trading",{valuePropName:"checked",initialValue:!1}],expression:"['enable_demo_trading', { valuePropName: 'checked', initialValue: false }]"}]},[e._v(" "+e._s(e.$t("profile.exchange.demoTrading"))+" ")])],1):e._e()]:e._e(),"ibkr"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrHost")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_host",{initialValue:"127.0.0.1"}],expression:"['ibkr_host', { initialValue: '127.0.0.1' }]"}],attrs:{placeholder:"127.0.0.1"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrPort")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_port",{initialValue:7497}],expression:"['ibkr_port', { initialValue: 7497 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:65535}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.ibkrPortHint")))])],1)],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrClientId")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_client_id",{initialValue:1}],expression:"['ibkr_client_id', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:999}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.ibkrAccount")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["ibkr_account"],expression:"['ibkr_account']"}],attrs:{placeholder:"DU123456"}})],1)]:e._e(),"mt5"===e.addExchangeType?[t("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"warning",showIcon:"",message:e.$t("profile.exchange.localDeploymentRequired"),description:e.$t("profile.exchange.localDeploymentHint")}}),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Server")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_server",{rules:[{required:!0,message:"Server is required"}]}],expression:"['mt5_server', { rules: [{ required: true, message: 'Server is required' }] }]"}],attrs:{placeholder:"MetaQuotes-Demo"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Login")}},[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_login",{rules:[{required:!0,message:"Login is required"}]}],expression:"['mt5_login', { rules: [{ required: true, message: 'Login is required' }] }]"}],staticStyle:{width:"100%"},attrs:{min:1,placeholder:"12345678"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5Password")}},[t("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_password",{rules:[{required:!0,message:"Password is required"}]}],expression:"['mt5_password', { rules: [{ required: true, message: 'Password is required' }] }]"}],attrs:{placeholder:"Password",autocomplete:"new-password"}})],1),t("a-form-item",{attrs:{label:e.$t("profile.exchange.mt5TerminalPath")}},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["mt5_terminal_path"],expression:"['mt5_terminal_path']"}],attrs:{placeholder:"C:\\Program Files\\MetaTrader 5\\terminal64.exe"}}),t("div",{staticClass:"field-hint"},[t("a-icon",{attrs:{type:"info-circle"}}),t("span",[e._v(e._s(e.$t("profile.exchange.mt5TerminalPathHint")))])],1)],1)]:e._e(),e.addExchangeType?t("a-form-item",[t("a-button",{attrs:{block:"",loading:e.testingExchange},on:{click:e.handleTestExchangeConnection}},[t("a-icon",{attrs:{type:"api"}}),e._v(" "+e._s(e.$t("profile.exchange.testConnection"))+" ")],1),e.exchangeTestResult?t("div",{staticClass:"test-result-msg",class:e.exchangeTestResult.success?"success":"error"},[t("a-icon",{attrs:{type:e.exchangeTestResult.success?"check-circle":"close-circle"}}),e._v(" "+e._s(e.exchangeTestResult.message)+" ")],1):e._e()],1):e._e()],2)],1)],1)},i=[],n=a(76338),o=a(81127),s=a(56252),l=(a(74423),a(84841)),c=a(53003),d=a(42430),u=a(36911),p=a(55434),f={name:"Profile",mixins:[p.t],data:function(){return{loading:!1,saving:!1,changingPassword:!1,sendingPwdCode:!1,pwdCodeCountdown:0,pwdCodeTimer:null,activeTab:"basic",profile:{id:null,username:"",nickname:"",email:"",avatar:"",role:"user",last_login_at:null},creditsLog:[],creditsLogLoading:!1,creditsLogPagination:{current:1,pageSize:10,total:0},referralData:{list:[],total:0,referral_code:"",referral_bonus:0,register_bonus:0},referralLoading:!1,referralPagination:{current:1,pageSize:10,total:0},billing:{credits:0,is_vip:!1,vip_expires_at:null,billing_enabled:!1,feature_costs:{}},rechargeTelegramUrl:"https://t.me/your_support_bot",notificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""},savingNotifications:!1,testingNotification:!1,exchangeCredentials:[],exchangeLoading:!1,showAddExchangeModal:!1,savingExchange:!1,testingExchange:!1,exchangeTestResult:null,addExchangeType:"",selectedExchangeId:"",cryptoExchangeList:[{id:"binance",name:"Binance"},{id:"okx",name:"OKX"},{id:"bitget",name:"Bitget"},{id:"bybit",name:"Bybit"},{id:"coinbaseexchange",name:"Coinbase"},{id:"kraken",name:"Kraken"},{id:"kucoin",name:"KuCoin"},{id:"gate",name:"Gate.io"},{id:"bitfinex",name:"Bitfinex"}]}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isVip:function(){if(!this.billing.vip_expires_at)return!1;var e=new Date(this.billing.vip_expires_at);return e>new Date},creditsLogColumns:function(){return[{title:this.$t("profile.creditsLog.time")||"时间",dataIndex:"created_at",width:160,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.creditsLog.action")||"类型",dataIndex:"action",width:100,scopedSlots:{customRender:"action"}},{title:this.$t("profile.creditsLog.amount")||"变动",dataIndex:"amount",width:100,scopedSlots:{customRender:"amount"}},{title:this.$t("profile.creditsLog.balance")||"余额",dataIndex:"balance_after",width:100},{title:this.$t("profile.creditsLog.remark")||"备注",dataIndex:"remark",ellipsis:!0}]},referralColumns:function(){return[{title:this.$t("profile.referral.user")||"用户",dataIndex:"username",scopedSlots:{customRender:"user"}},{title:this.$t("profile.referral.registerTime")||"注册时间",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]},referralLink:function(){var e=window.location.origin+window.location.pathname,t=this.referralData.referral_code||this.profile.id;return"".concat(e,"#/user/login?ref=").concat(t)},exchangeColumns:function(){return[{title:this.$t("profile.exchange.colExchange")||"Exchange",dataIndex:"exchange_id",width:140,scopedSlots:{customRender:"exchange_id"}},{title:this.$t("profile.exchange.colName")||"Name",dataIndex:"name",width:140,customRender:function(e){return e||"-"}},{title:this.$t("profile.exchange.colHint")||"Connection Info",dataIndex:"api_key_hint",scopedSlots:{customRender:"api_key_hint"}},{title:this.$t("profile.exchange.colCreatedAt")||"Created At",dataIndex:"created_at",width:180,scopedSlots:{customRender:"created_at"}},{title:this.$t("profile.exchange.colActions")||"Actions",width:120,scopedSlots:{customRender:"action"}}]},addExchangeNeedsPassphrase:function(){var e=["okx","bitget","kucoin"];return e.includes(this.selectedExchangeId)},addExchangeShowDemo:function(){return"binance"===this.selectedExchangeId}},watch:{activeTab:function(e){"credits"===e&&0===this.creditsLog.length&&this.loadCreditsLog(),"referrals"!==e||this.referralData.list&&0!==this.referralData.list.length||this.loadReferrals(),"notifications"!==e||this.notificationSettings.telegram_chat_id||this.notificationSettings.discord_webhook||this.loadNotificationSettings(),"exchange"===e&&0===this.exchangeCredentials.length&&this.loadExchangeCredentials()}},beforeCreate:function(){this.profileForm=this.$form.createForm(this,{name:"profile"}),this.passwordForm=this.$form.createForm(this,{name:"password"}),this.notificationForm=this.$form.createForm(this,{name:"notification"}),this.exchangeForm=this.$form.createForm(this,{name:"exchange"})},mounted:function(){this.loadProfile(),this.loadReferrals()},beforeDestroy:function(){this.pwdCodeTimer&&clearInterval(this.pwdCodeTimer)},methods:{loadProfile:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.loading=!0,t.p=1,t.n=2,(0,l.E$)();case 2:a=t.v,1===a.code?(e.profile=a.data,a.data.billing&&(e.billing=a.data.billing),a.data.notification_settings&&(e.notificationSettings={default_channels:a.data.notification_settings.default_channels||["browser"],telegram_bot_token:a.data.notification_settings.telegram_bot_token||"",telegram_chat_id:a.data.notification_settings.telegram_chat_id||"",email:a.data.notification_settings.email||a.data.email||"",phone:a.data.notification_settings.phone||"",discord_webhook:a.data.notification_settings.discord_webhook||"",webhook_url:a.data.notification_settings.webhook_url||"",webhook_token:a.data.notification_settings.webhook_token||""}),e.$nextTick(function(){e.profileForm.setFieldsValue({nickname:e.profile.nickname,email:e.profile.email})})):e.$message.error(a.msg||"Failed to load profile"),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load profile");case 4:return t.p=4,e.loading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},loadRechargeUrl:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if("admin"!==e.profile.role){t.n=4;break}return t.p=1,t.n=2,(0,c.YT)();case 2:a=t.v,1===a.code&&a.data&&a.data.billing&&(e.rechargeTelegramUrl=a.data.billing.RECHARGE_TELEGRAM_URL||e.rechargeTelegramUrl),t.n=4;break;case 3:t.p=3,t.v;case 4:return t.a(2)}},t,null,[[1,3]])}))()},handleRecharge:function(){this.$router.push("/billing")},formatCredits:function(e){return e||0===e?Number(e).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(e){if(!e)return"";var t=new Date(e);return t.toLocaleDateString()},handleSaveProfile:function(){var e=this;this.profileForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.saving=!0,t.p=2,t.n=3,(0,l.r7)(r);case 3:i=t.v,1===i.code?(e.$message.success(i.msg||"Profile updated successfully"),e.loadProfile()):e.$message.error(i.msg||"Update failed"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("Update failed");case 5:return t.p=5,e.saving=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},validateConfirmPassword:function(e,t,a){var r=this.passwordForm.getFieldValue("new_password");t&&t!==r?a(this.$t("profile.passwordMismatch")||"Passwords do not match"):a()},handleSendPwdCode:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var r,i,n,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e.profile.email){t.n=1;break}return e.$message.error(e.$t("profile.noEmailWarning")||"Please set your email first"),t.a(2);case 1:return e.sendingPwdCode=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return r=t.v,i=r.sendVerificationCode,t.n=4,i({email:e.profile.email,type:"change_password"});case 4:n=t.v,1===n.code?(e.$message.success(e.$t("profile.codeSent")||"Verification code sent"),e.startPwdCodeCountdown()):e.$message.error(n.msg||"Failed to send code"),t.n=6;break;case 5:t.p=5,l=t.v,e.$message.error((null===(s=l.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||"Failed to send code");case 6:return t.p=6,e.sendingPwdCode=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}))()},startPwdCodeCountdown:function(){var e=this;this.pwdCodeCountdown=60,this.pwdCodeTimer=setInterval(function(){e.pwdCodeCountdown--,e.pwdCodeCountdown<=0&&(clearInterval(e.pwdCodeTimer),e.pwdCodeTimer=null)},1e3)},validateNewPassword:function(e,t,a){t?t.length<8?a(new Error(this.$t("user.register.pwdMinLength")||"At least 8 characters")):/[A-Z]/.test(t)?/[a-z]/.test(t)?/[0-9]/.test(t)?a():a(new Error(this.$t("user.register.pwdNumber")||"At least one number")):a(new Error(this.$t("user.register.pwdLowercase")||"At least one lowercase letter")):a(new Error(this.$t("user.register.pwdUppercase")||"At least one uppercase letter")):a()},handleChangePassword:function(){var e=this;this.passwordForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(r,i){var n,s,l,c,d;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!r){t.n=1;break}return t.a(2);case 1:return e.changingPassword=!0,t.p=2,t.n=3,a.e(824).then(a.bind(a,95824));case 3:return n=t.v,s=n.changePassword,t.n=4,s({code:i.code,new_password:i.new_password});case 4:l=t.v,1===l.code?(e.$message.success(l.msg||"Password changed successfully"),e.passwordForm.resetFields()):e.$message.error(l.msg||"Change password failed"),t.n=6;break;case 5:t.p=5,d=t.v,e.$message.error((null===(c=d.response)||void 0===c||null===(c=c.data)||void 0===c?void 0:c.msg)||"Change password failed");case 6:return t.p=6,e.changingPassword=!1,t.f(6);case 7:return t.a(2)}},t,null,[[2,5,6,7]])}));return function(e,a){return t.apply(this,arguments)}}())},getRoleColor:function(e){var t={admin:"red",manager:"orange",user:"blue",viewer:"default"};return t[e]||"default"},getRoleLabel:function(e){var t={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return t[e]||e},formatTime:function(e){if(!e)return"";var t=new Date("number"===typeof e?1e3*e:e);return t.toLocaleString()},loadCreditsLog:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.creditsLogLoading=!0,t.p=1,t.n=2,(0,l.v9)({page:e.creditsLogPagination.current,page_size:e.creditsLogPagination.pageSize});case 2:a=t.v,1===a.code&&(e.creditsLog=a.data.items||[],e.creditsLogPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load credits log");case 4:return t.p=4,e.creditsLogLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleCreditsLogChange:function(e){this.creditsLogPagination.current=e.current,this.loadCreditsLog()},loadReferrals:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.referralLoading=!0,t.p=1,t.n=2,(0,l.rx)({page:e.referralPagination.current,page_size:e.referralPagination.pageSize});case 2:a=t.v,1===a.code&&(e.referralData={list:a.data.list||[],total:a.data.total||0,referral_code:a.data.referral_code||"",referral_bonus:a.data.referral_bonus||0,register_bonus:a.data.register_bonus||0},e.referralPagination.total=a.data.total||0),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load referral data");case 4:return t.p=4,e.referralLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleReferralChange:function(e){this.referralPagination.current=e.current,this.loadReferrals()},copyReferralLink:function(){var e=this,t=this.referralLink;navigator.clipboard?navigator.clipboard.writeText(t).then(function(){e.$message.success(e.$t("profile.referral.linkCopied")||"邀请链接已复制")}).catch(function(){e.fallbackCopy(t)}):this.fallbackCopy(t)},fallbackCopy:function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select();try{document.execCommand("copy"),this.$message.success(this.$t("profile.referral.linkCopied")||"邀请链接已复制")}catch(a){this.$message.error("Copy failed")}document.body.removeChild(t)},getActionColor:function(e){var t={consume:"red",recharge:"green",admin_adjust:"blue",refund:"orange",vip_grant:"gold",vip_revoke:"default",register_bonus:"cyan",referral_bonus:"purple",indicator_purchase:"volcano",indicator_sale:"lime"};return t[e]||"default"},getActionLabel:function(e){var t={consume:this.$t("profile.creditsLog.actionConsume")||"消费",recharge:this.$t("profile.creditsLog.actionRecharge")||"充值",admin_adjust:this.$t("profile.creditsLog.actionAdjust")||"调整",refund:this.$t("profile.creditsLog.actionRefund")||"退款",vip_grant:this.$t("profile.creditsLog.actionVipGrant")||"VIP授予",vip_revoke:this.$t("profile.creditsLog.actionVipRevoke")||"VIP取消",register_bonus:this.$t("profile.creditsLog.actionRegisterBonus")||"注册奖励",referral_bonus:this.$t("profile.creditsLog.actionReferralBonus")||"邀请奖励",indicator_purchase:this.$t("profile.creditsLog.actionIndicatorPurchase")||"购买指标",indicator_sale:this.$t("profile.creditsLog.actionIndicatorSale")||"出售指标"};return t[e]||e},loadExchangeCredentials:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return e.exchangeLoading=!0,t.p=1,t.n=2,(0,d.IA)();case 2:a=t.v,1===a.code&&a.data&&(e.exchangeCredentials=a.data.items||[]),t.n=4;break;case 3:t.p=3,t.v,e.$message.error("Failed to load exchange accounts");case 4:return t.p=4,e.exchangeLoading=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}))()},handleExchangeTypeChange:function(e){this.selectedExchangeId=e,this.exchangeTestResult=null;var t=this.cryptoExchangeList.map(function(e){return e.id});t.includes(e)?this.addExchangeType="crypto":this.addExchangeType="ibkr"===e?"ibkr":"mt5"===e?"mt5":""},getExchangeDisplayName:function(e){var t={binance:"Binance",okx:"OKX",bitget:"Bitget",bybit:"Bybit",coinbaseexchange:"Coinbase",kraken:"Kraken",kucoin:"KuCoin",gate:"Gate.io",bitfinex:"Bitfinex",ibkr:"IBKR",mt5:"MetaTrader 5"};return t[e]||e},handleSaveExchange:function(){var e=this;this.exchangeForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingExchange=!0,t.p=2,i=(0,n.A)({},r),t.n=3,(0,d.PR)(i);case 3:s=t.v,1===s.code?(e.$message.success(e.$t("profile.exchange.saveSuccess")),e.showAddExchangeModal=!1,e.exchangeForm.resetFields(),e.addExchangeType="",e.selectedExchangeId="",e.exchangeTestResult=null,e.loadExchangeCredentials()):e.$message.error(s.msg||e.$t("profile.exchange.saveFailed")),t.n=5;break;case 4:t.p=4,l=t.v,e.$message.error(l.message||e.$t("profile.exchange.saveFailed"));case 5:return t.p=5,e.savingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleDeleteCredential:function(e){var t=this;return(0,s.A)((0,o.A)().m(function a(){var r;return(0,o.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,d.kI)(e);case 1:r=a.v,1===r.code?(t.$message.success(t.$t("profile.exchange.deleteSuccess")),t.loadExchangeCredentials()):t.$message.error(r.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,t.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},handleTestExchangeConnection:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i,s,l;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.exchangeForm.getFieldsValue(),r=a.exchange_id,r){t.n=1;break}return t.a(2);case 1:return e.testingExchange=!0,e.exchangeTestResult=null,t.p=2,i=(0,n.A)({},a),t.n=3,(0,u.kv)(i);case 3:s=t.v,1===s.code?e.exchangeTestResult={success:!0,message:e.$t("profile.exchange.testSuccess")}:e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(s.msg||"Unknown error")},t.n=5;break;case 4:t.p=4,l=t.v,e.exchangeTestResult={success:!1,message:"".concat(e.$t("profile.exchange.testFailed"),": ").concat(l.message||"Network error")};case 5:return t.p=5,e.testingExchange=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}))()},loadNotificationSettings:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,l.vF)();case 1:a=t.v,1===a.code&&a.data&&(e.notificationSettings={default_channels:a.data.default_channels||["browser"],telegram_bot_token:a.data.telegram_bot_token||"",telegram_chat_id:a.data.telegram_chat_id||"",email:a.data.email||e.profile.email||"",phone:a.data.phone||"",discord_webhook:a.data.discord_webhook||"",webhook_url:a.data.webhook_url||"",webhook_token:a.data.webhook_token||""},e.$nextTick(function(){e.notificationForm.setFieldsValue({default_channels:e.notificationSettings.default_channels,telegram_bot_token:e.notificationSettings.telegram_bot_token,telegram_chat_id:e.notificationSettings.telegram_chat_id,email:e.notificationSettings.email,phone:e.notificationSettings.phone,discord_webhook:e.notificationSettings.discord_webhook,webhook_url:e.notificationSettings.webhook_url,webhook_token:e.notificationSettings.webhook_token})})),t.n=3;break;case 2:t.p=2,t.v;case 3:return t.a(2)}},t,null,[[0,2]])}))()},handleSaveNotifications:function(){var e=this;this.notificationForm.validateFields(function(){var t=(0,s.A)((0,o.A)().m(function t(a,r){var i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(!a){t.n=1;break}return t.a(2);case 1:return e.savingNotifications=!0,t.p=2,t.n=3,(0,l.Gl)({default_channels:r.default_channels||["browser"],telegram_bot_token:r.telegram_bot_token||"",telegram_chat_id:r.telegram_chat_id||"",email:r.email||"",phone:r.phone||"",discord_webhook:r.discord_webhook||"",webhook_url:r.webhook_url||"",webhook_token:r.webhook_token||""});case 3:i=t.v,1===i.code?(e.$message.success(e.$t("profile.notifications.saveSuccess")||"通知设置保存成功"),e.notificationSettings=i.data||e.notificationSettings):e.$message.error(i.msg||"保存失败"),t.n=5;break;case 4:t.p=4,t.v,e.$message.error("保存失败");case 5:return t.p=5,e.savingNotifications=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e,a){return t.apply(this,arguments)}}())},handleTestNotification:function(){var e=this;return(0,s.A)((0,o.A)().m(function t(){var a,r,i;return(0,o.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(a=e.notificationForm.getFieldsValue(),r=a.default_channels||[],0!==r.length){t.n=1;break}return e.$message.warning(e.$t("profile.notifications.selectChannel")||"请至少选择一个通知渠道"),t.a(2);case 1:if(!r.includes("telegram")){t.n=3;break}if(a.telegram_bot_token){t.n=2;break}return e.$message.warning(e.$t("profile.notifications.fillTelegramToken")||"请填写 Telegram Bot Token"),t.a(2);case 2:if(a.telegram_chat_id){t.n=3;break}return e.$message.warning(e.$t("profile.notifications.fillTelegram")||"请填写 Telegram Chat ID"),t.a(2);case 3:if(!r.includes("email")||a.email){t.n=4;break}return e.$message.warning(e.$t("profile.notifications.fillEmail")||"请填写通知邮箱"),t.a(2);case 4:return e.testingNotification=!0,t.p=5,t.n=6,(0,l.Gl)({default_channels:r,telegram_bot_token:a.telegram_bot_token||"",telegram_chat_id:a.telegram_chat_id||"",email:a.email||"",phone:a.phone||"",discord_webhook:a.discord_webhook||"",webhook_url:a.webhook_url||"",webhook_token:a.webhook_token||""});case 6:if(i=t.v,1===i.code){t.n=7;break}return e.$message.error(i.msg||"保存设置失败"),t.a(2);case 7:e.$message.info(e.$t("profile.notifications.testSent")||"测试通知已发送,请检查您的通知渠道"),t.n=9;break;case 8:t.p=8,t.v,e.$message.error("发送测试通知失败");case 9:return t.p=9,e.testingNotification=!1,t.f(9);case 10:return t.a(2)}},t,null,[[5,8,9,10]])}))()}}},m=f,h=a(845),g=(0,h.A)(m,r,i,!1,null,"6dceb76a",null),v=g.exports},42430:function(e,t,a){a.d(t,{IA:function(){return o},PR:function(){return s},kI:function(){return l}});var r=a(76338),i=a(75769),n={list:"/api/credentials/list",get:"/api/credentials/get",create:"/api/credentials/create",delete:"/api/credentials/delete"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:n.list,method:"get",params:e})}function s(e){return(0,i.Ay)({url:n.create,method:"post",data:e})}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,i.Ay)({url:n.delete,method:"delete",params:(0,r.A)({id:e},t)})}},53003:function(e,t,a){a.d(t,{DZ:function(){return o},YT:function(){return n},_d:function(){return s},lo:function(){return i}});var r=a(75769);function i(){return(0,r.Ay)({url:"/api/settings/schema",method:"get"})}function n(){return(0,r.Ay)({url:"/api/settings/values",method:"get"})}function o(e){return(0,r.Ay)({url:"/api/settings/save",method:"post",data:e})}function s(){return(0,r.Ay)({url:"/api/settings/openrouter-balance",method:"get"})}},84841:function(e,t,a){a.d(t,{DK:function(){return _},E$:function(){return d},Gl:function(){return f},O0:function(){return c},TK:function(){return o},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return s},kg:function(){return n},nY:function(){return v},r7:function(){return u},rx:function(){return h},v9:function(){return m},vF:function(){return p},vi:function(){return w},wq:function(){return g}});var r=a(75769);function i(e){return(0,r.Ay)({url:"/api/users/list",method:"get",params:e})}function n(e){return(0,r.Ay)({url:"/api/users/create",method:"post",data:e})}function o(e,t){return(0,r.Ay)({url:"/api/users/update",method:"put",params:{id:e},data:t})}function s(e){return(0,r.Ay)({url:"/api/users/delete",method:"delete",params:{id:e}})}function l(e){return(0,r.Ay)({url:"/api/users/reset-password",method:"post",data:e})}function c(){return(0,r.Ay)({url:"/api/users/roles",method:"get"})}function d(){return(0,r.Ay)({url:"/api/users/profile",method:"get"})}function u(e){return(0,r.Ay)({url:"/api/users/profile/update",method:"put",data:e})}function p(){return(0,r.Ay)({url:"/api/users/notification-settings",method:"get"})}function f(e){return(0,r.Ay)({url:"/api/users/notification-settings",method:"put",data:e})}function m(e){return(0,r.Ay)({url:"/api/users/my-credits-log",method:"get",params:e})}function h(e){return(0,r.Ay)({url:"/api/users/my-referrals",method:"get",params:e})}function g(e){return(0,r.Ay)({url:"/api/users/set-credits",method:"post",data:e})}function v(e){return(0,r.Ay)({url:"/api/users/set-vip",method:"post",data:e})}function _(e){return(0,r.Ay)({url:"/api/users/system-strategies",method:"get",params:e})}function w(e){return(0,r.Ay)({url:"/api/users/admin-orders",method:"get",params:e})}function b(e){return(0,r.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:e})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/320-legacy.e6d4662f.js b/frontend/dist/js/320-legacy.e6d4662f.js new file mode 100644 index 0000000..fa43870 --- /dev/null +++ b/frontend/dist/js/320-legacy.e6d4662f.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[320],{7320:function(t,a,e){e.r(a),e.d(a,{default:function(){return _}});e(28706),e(34782);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"dashboard-pro",class:{"theme-dark":t.isDarkTheme}},[a("div",{staticClass:"kpi-grid"},[a("div",{staticClass:"kpi-card kpi-primary"},[a("div",{staticClass:"kpi-glow"}),a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalEquity")))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"currency"},[t._v("$")]),a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_equity)))])]),a("div",{staticClass:"kpi-sub"},[a("span",{class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(81127),i=e(56252),o=e(57532),l=e(2403),d=e(76338),c=(e(2008),e(23418),e(74423),e(62062),e(26910),e(62010),e(36033),e(2892),e(9868),e(26099),e(27495),e(21699),e(47764),e(68156),e(42762),e(62953),e(15014)),u=e(75769),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n
\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"7ff4e505",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/355-legacy.d4eea827.js b/frontend/dist/js/355-legacy.d4eea827.js deleted file mode 100644 index adcd367..0000000 --- a/frontend/dist/js/355-legacy.d4eea827.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[355],{18355:function(t,a,e){e.r(a),e.d(a,{default:function(){return _}});e(28706),e(34782);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"dashboard-pro",class:{"theme-dark":t.isDarkTheme}},[a("div",{staticClass:"kpi-grid"},[a("div",{staticClass:"kpi-card kpi-primary"},[a("div",{staticClass:"kpi-glow"}),a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"wallet"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalEquity")))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"currency"},[t._v("$")]),a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_equity)))])]),a("div",{staticClass:"kpi-sub"},[a("span",{class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(81127),i=e(56252),o=e(57532),l=e(2403),d=e(76338),c=(e(2008),e(23418),e(74423),e(62062),e(26910),e(62010),e(36033),e(2892),e(9868),e(26099),e(27495),e(21699),e(47764),e(68156),e(42762),e(62953),e(15014)),u=e(75769),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n
\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"16dc1b35",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/367.4284ba87.js b/frontend/dist/js/367.4284ba87.js deleted file mode 100644 index cc85adb..0000000 --- a/frontend/dist/js/367.4284ba87.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[367],{7404:function(t,a,e){e.r(a),e.d(a,{default:function(){return x}});var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-asset-analysis-page",class:{"theme-dark":t.isDarkTheme}},[t.opportunities.length>0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"monitor"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.monitor"))+" ")],1),a("div",{staticClass:"tab-body"},["monitor"===t.activeTab?a("PortfolioView",{attrs:{embedded:!0}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(81127),o=e(56252),r=e(2403),l=e(76338),c=(e(74423),e(95353)),p=e(59896),u=e(16185),y=e(44146),d=e(62611),m=function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal"},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{staticStyle:{"margin-top":"16px",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])},h=[],k=e(75769),v="/api/polymarket";function g(t){return(0,k.Ay)({url:"".concat(v,"/analyze"),method:"post",data:t,timeout:12e4})}function _(t){return(0,k.Ay)({url:"".concat(v,"/history"),method:"get",params:t})}var b={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,g({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,o.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},f=b,C=e(845),S=(0,C.A)(f,m,h,!1,null,"41dfa054",null),$=S.exports,A={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],PortfolioView:u["default"],QuickTradePanel:d.A,PolymarketAnalysisModal:$},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,r.A)(this.opportunities),(0,r.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,o.A)((0,n.A)().m(function e(){var s,i,o;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,y.r9)(i);case 2:o=e.v,o&&1===o.code&&Array.isArray(o.data)&&(a.opportunities=o.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),o=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",o)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},T=A,w=(0,C.A)(T,s,i,!1,null,"20b827f5",null),x=w.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/38.9f8bb2b9.js b/frontend/dist/js/38.9f8bb2b9.js new file mode 100644 index 0000000..fceebcf --- /dev/null +++ b/frontend/dist/js/38.9f8bb2b9.js @@ -0,0 +1,18 @@ +(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[38],{39037:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(44735),s=i(15863),l=i(81127),c=i(56252),u=(i(6011),i(18787)),d=i(76338),h=(i(74423),i(85471)),p=i(95353),f=i(75769),v=i(35038),g=i(505),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(57532),x=i(15237),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(75314),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[],P=i(21560),L=i(26297),R=i(2403),F=function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)};function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#141414",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2a2a",gridLineColor:"#252525",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2a2a",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#252525"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"58f93984",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='
'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(62611),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"211c2fea",null),ua=ca.exports},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ +/** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,n.A)(t)+" is not iterable")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/397-legacy.14ad2c5b.js b/frontend/dist/js/397-legacy.14ad2c5b.js deleted file mode 100644 index e2f7335..0000000 --- a/frontend/dist/js/397-legacy.14ad2c5b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[397],{45397:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(52675),a(89463),a(28706),a(50778);var s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"settings-page",class:{"theme-dark":e.isDarkTheme}},[e.showRestartTip?t("a-alert",{staticClass:"restart-alert",attrs:{type:"warning",showIcon:"",closable:""},on:{close:function(t){e.showRestartTip=!1}}},[t("template",{slot:"message"},[t("span",[e._v(e._s(e.$t("settings.restartRequired")))]),t("a-button",{attrs:{size:"small",type:"link"},on:{click:e.copyRestartCommand}},[e._v(" "+e._s(e.$t("settings.copyRestartCmd"))+" ")])],1)],2):e._e(),t("div",{staticClass:"settings-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"setting"}}),t("span",[e._v(e._s(e.$t("settings.title")))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("settings.description")))])]),t("a-spin",{attrs:{spinning:e.loading}},[t("div",{staticClass:"settings-content"},[t("a-collapse",{staticClass:"settings-collapse",attrs:{bordered:!1},model:{value:e.activeKeys,callback:function(t){e.activeKeys=t},expression:"activeKeys"}},e._l(e.sortedSchema,function(a,s){return t("a-collapse-panel",{key:s},[t("template",{slot:"header"},[t("span",{staticClass:"panel-header"},[t("a-icon",{staticClass:"panel-icon-left",attrs:{type:a.icon||e.getGroupIcon(s)}}),t("span",{staticClass:"panel-title"},[e._v(e._s(e.getGroupTitle(s,a.title)))])],1)]),"ai"===s?t("div",{staticClass:"openrouter-balance-card"},[t("a-card",{attrs:{size:"small",bordered:!1}},[t("div",{staticClass:"balance-header"},[t("span",{staticClass:"balance-title"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("settings.openrouterBalance")||"OpenRouter 账户余额")+" ")],1),t("a-button",{attrs:{size:"small",type:"primary",ghost:"",loading:e.balanceLoading},on:{click:e.queryOpenRouterBalance}},[t("a-icon",{attrs:{type:"sync"}}),e._v(" "+e._s(e.$t("settings.queryBalance")||"查询余额")+" ")],1)],1),e.openrouterBalance?t("div",{staticClass:"balance-info"},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceUsage")||"已使用",value:e.openrouterBalance.usage,prefix:"$",precision:4,"value-style":{color:"#cf1322"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceRemaining")||"剩余额度",value:null!==e.openrouterBalance.limit_remaining?e.openrouterBalance.limit_remaining:"∞",prefix:null!==e.openrouterBalance.limit_remaining?"$":"",precision:null!==e.openrouterBalance.limit_remaining?4:0,"value-style":{color:null!==e.openrouterBalance.limit_remaining&&e.openrouterBalance.limit_remaining<1?"#cf1322":"#3f8600"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceLimit")||"总限额",value:null!==e.openrouterBalance.limit?e.openrouterBalance.limit:"∞",prefix:null!==e.openrouterBalance.limit?"$":"",precision:null!==e.openrouterBalance.limit?2:0}})],1)],1),e.openrouterBalance.is_free_tier?t("div",{staticClass:"free-tier-badge"},[t("a-tag",{attrs:{color:"blue"}},[e._v("Free Tier")])],1):e._e()],1):t("div",{staticClass:"balance-empty"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"info-circle"}}),e._v(" "+e._s(e.$t("settings.balanceNotQueried")||'点击"查询余额"获取账户信息')+" ")],1)])],1):e._e(),t("a-form",{staticClass:"settings-form",attrs:{form:e.form,layout:"vertical"}},[t("a-row",{attrs:{gutter:24}},e._l(a.items,function(a){return t("a-col",{key:a.key,attrs:{xs:24,sm:24,md:12,lg:12}},[t("a-form-item",[t("template",{slot:"label"},[t("span",{staticClass:"form-label-with-tooltip"},[t("span",{staticClass:"label-text"},[e._v(e._s(e.getItemLabel(s,a)))]),a.description?t("a-tooltip",{attrs:{placement:"top"}},[t("template",{slot:"title"},[e._v(" "+e._s(e.getItemDescription(s,a))+" ")]),t("a-icon",{staticClass:"help-icon",attrs:{type:"question-circle"}})],2):e._e(),a.link?t("a",{staticClass:"api-link",attrs:{href:a.link,target:"_blank",rel:"noopener noreferrer"},on:{click:function(e){e.stopPropagation()}}},[t("a-icon",{attrs:{type:"link"}}),e._v(" "+e._s(e.getLinkText(a.link_text))+" ")],1):e._e()],1)]),"text"===a.type?[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):"",allowClear:""}})]:"password"===a.type?[t("div",{staticClass:"password-field"},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{type:e.passwordVisible[a.key]?"text":"password",placeholder:e.$t("settings.inputApiKey"),allowClear:""}},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{slot:"suffix",type:e.passwordVisible[a.key]?"eye":"eye-invisible"},on:{click:function(t){return e.togglePasswordVisible(a.key)}},slot:"suffix"})],1)],1)]:"number"===a.type?[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getNumberValue(s,a.key,a.default)}],expression:"[item.key, { initialValue: getNumberValue(groupKey, item.key, item.default) }]"}],staticStyle:{width:"100%"},attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):""}})]:"boolean"===a.type?[t("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{valuePropName:"checked",initialValue:e.getBoolValue(s,a.key,a.default)}],expression:"[item.key, { valuePropName: 'checked', initialValue: getBoolValue(groupKey, item.key, item.default) }]"}]})]:"select"===a.type?[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)||a.default}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) || item.default }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):e.$t("settings.pleaseSelect")}},e._l(e.getSelectOptions(a.options),function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[e._v(" "+e._s(a.label)+" ")])}),1)]:e._e(),a.default&&"boolean"!==a.type&&"password"!==a.type?t("div",{staticClass:"field-default"},[e._v(" "+e._s(e.$t("settings.default"))+": "+e._s(a.default)+" ")]):e._e()],2)],1)}),1)],1)],2)}),1)],1)]),t("div",{staticClass:"settings-footer"},[t("a-button",{attrs:{disabled:e.saving},on:{click:e.handleReset}},[t("a-icon",{attrs:{type:"undo"}}),e._v(" "+e._s(e.$t("settings.reset"))+" ")],1),t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSave}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("settings.save"))+" ")],1)],1)],1)},i=[],n=a(57532),r=a(81127),l=a(56252),o=a(44735),c=a(15863),u=(a(2008),a(62062),a(26910),a(5506),a(79432),a(26099),a(47764),a(11392),a(62953),a(53003)),p=a(55434),d={name:"Settings",mixins:[p.t],data:function(){return{loading:!1,saving:!1,schema:{},values:{},activeKeys:["auth","ai","trading"],passwordVisible:{},showRestartTip:!1,balanceLoading:!1,openrouterBalance:null}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},sortedSchema:function(){var e=Object.entries(this.schema);e.sort(function(e,t){var a=e[1].order||999,s=t[1].order||999;return a-s});for(var t={},a=0,s=e;a=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+t._s(t.formatNumber(t.summary.total_pnl))+" ")]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.totalPnl")))])])])]),a("div",{staticClass:"kpi-card kpi-win-rate"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"trophy"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.winRate")||"胜率"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.win_rate,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"positive"},[t._v(t._s(t.performance.winning_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"divider"},[t._v("/")]),a("span",{staticClass:"negative"},[t._v(t._s(t.performance.losing_trades))]),a("span",{staticClass:"label"},[t._v(t._s(t.$t("dashboard.label.lose")))])])]),a("div",{staticClass:"kpi-ring"},[a("svg",{attrs:{viewBox:"0 0 36 36"}},[a("path",{staticClass:"ring-bg",attrs:{d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}}),a("path",{staticClass:"ring-progress",attrs:{"stroke-dasharray":"".concat(t.performance.win_rate||0,", 100"),d:"M18 2.0845 a 15.9155 15.9155 0 0 1 0 31.831 a 15.9155 15.9155 0 0 1 0 -31.831"}})])])]),a("div",{staticClass:"kpi-card kpi-profit-factor"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"rise"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.profitFactor")||"盈亏比"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.performance.profit_factor,2)))]),a("span",{staticClass:"unit"},[t._v(":1")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgProfit"))+" ")]),a("span",{staticClass:"positive"},[t._v("$"+t._s(t.formatNumber(t.performance.avg_win)))])])])]),a("div",{staticClass:"kpi-card kpi-drawdown"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"fall"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.maxDrawdown")||"最大回撤"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount negative"},[t._v(t._s(t.formatNumber(t.performance.max_drawdown_pct,1)))]),a("span",{staticClass:"unit"},[t._v("%")])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v("$"+t._s(t.formatNumber(t.performance.max_drawdown)))])])])]),a("div",{staticClass:"kpi-card kpi-trades"},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"swap"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.totalTrades")||"总交易"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.performance.total_trades))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.trades")))])]),a("div",{staticClass:"kpi-sub"},[a("span",[t._v(t._s(t.$t("dashboard.label.avgDaily"))+" ")]),a("span",[t._v(t._s(t.avgTradesPerDay))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.unit.trades")))])])])]),a("div",{staticClass:"kpi-card kpi-strategies clickable",on:{click:function(a){return t.$router.push("/trading-assistant")}}},[a("div",{staticClass:"kpi-content"},[a("div",{staticClass:"kpi-header"},[a("span",{staticClass:"kpi-icon"},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1),a("span",{staticClass:"kpi-label"},[t._v(t._s(t.$t("dashboard.runningStrategies")||"运行中策略"))])]),a("div",{staticClass:"kpi-value"},[a("span",{staticClass:"amount"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"unit"},[t._v(t._s(t.$t("dashboard.unit.strategies")))])]),a("div",{staticClass:"kpi-sub"},[a("span",{staticClass:"highlight"},[t._v(t._s(t.summary.indicator_strategy_count))]),a("span",{staticClass:"label"},[t._v(" "+t._s(t.$t("dashboard.label.indicator")))])])]),a("div",{staticClass:"card-arrow"},[a("a-icon",{attrs:{type:"right"}})],1)])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-main"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"calendar"}}),a("span",[t._v(t._s(t.$t("dashboard.profitCalendar")||"收益日曆"))])],1),a("div",{staticClass:"calendar-nav"},[a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex>=t.calendarMonths.length-1},on:{click:t.prevMonth}},[a("a-icon",{attrs:{type:"left"}})],1),a("span",{staticClass:"current-month"},[t._v(t._s(t.currentMonthLabel))]),a("a-button",{attrs:{type:"link",size:"small",disabled:t.currentCalendarIndex<=0},on:{click:t.nextMonth}},[a("a-icon",{attrs:{type:"right"}})],1)],1)]),a("div",{staticClass:"profit-calendar"},[t.currentCalendarMonth?[a("div",{staticClass:"month-summary"},[a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{staticClass:"summary-value",class:t.currentCalendarMonth.total>=0?"positive":"negative"},[t._v(" "+t._s(t.currentCalendarMonth.total>=0?"+":"")+"$"+t._s(t.formatNumber(t.currentCalendarMonth.total))+" ")])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.win")))]),a("span",{staticClass:"summary-value positive"},[t._v(t._s(t.currentCalendarMonth.win_days))])]),a("div",{staticClass:"summary-item"},[a("span",{staticClass:"summary-label"},[t._v(t._s(t.$t("dashboard.label.lose")))]),a("span",{staticClass:"summary-value negative"},[t._v(t._s(t.currentCalendarMonth.lose_days))])])]),a("div",{staticClass:"calendar-weekdays"},t._l(t.weekdays,function(e){return a("div",{key:e,staticClass:"weekday"},[t._v(t._s(e))])}),0),a("div",{staticClass:"calendar-grid"},[t._l(t.calendarFirstDayOffset,function(t){return a("div",{key:"empty-"+t,staticClass:"calendar-cell empty"})}),t._l(t.currentCalendarMonth.days_in_month,function(e){return a("div",{key:e,staticClass:"calendar-cell",class:t.getDayClass(e)},[a("span",{staticClass:"day-number"},[t._v(t._s(e))]),null!==t.getDayProfit(e)?a("span",{staticClass:"day-profit",class:t.getDayProfit(e)>=0?"positive":"negative"},[t._v(" "+t._s(t.getDayProfit(e)>=0?"+":"")+t._s(t.formatCompactNumber(t.getDayProfit(e)))+" ")]):t._e()])})],2)]:a("div",{staticClass:"calendar-empty"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noData")))])],1)],2)]),a("div",{staticClass:"chart-panel chart-side"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"pie-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyAllocation")||"策略分布"))])],1)]),a("div",{ref:"pieChart",staticClass:"chart-body"})])]),a("div",{staticClass:"chart-row"},[a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"area-chart"}}),a("span",[t._v(t._s(t.$t("dashboard.drawdownCurve")||"回撤曲线"))])],1)]),a("div",{ref:"drawdownChart",staticClass:"chart-body chart-sm"})]),a("div",{staticClass:"chart-panel chart-half"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"clock-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.hourlyDistribution")||"交易时段"))])],1)]),a("div",{ref:"hourlyChart",staticClass:"chart-body chart-sm"})])]),a("div",{staticClass:"chart-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"ordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.strategyRanking")||"策略排行榜"))])],1)]),a("div",{staticClass:"strategy-ranking"},[0===t.strategyStats.length?a("div",{staticClass:"empty-state"},[a("a-icon",{attrs:{type:"inbox"}}),a("span",[t._v(t._s(t.$t("dashboard.noStrategyData")))])],1):a("div",{staticClass:"ranking-grid"},t._l(t.strategyStats.slice(0,6),function(e,s){return a("div",{key:e.strategy_id,staticClass:"ranking-card",class:{"rank-top":s<3}},[a("div",{staticClass:"rank-badge",class:"rank-".concat(s+1)},[t._v(t._s(s+1))]),a("div",{staticClass:"rank-info"},[a("div",{staticClass:"rank-name"},[t._v(t._s(e.strategy_name))]),a("div",{staticClass:"rank-stats"},[a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.totalProfit")))]),a("span",{class:e.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(e.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(e.total_pnl))+" ")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.winRate")))]),a("span",[t._v(t._s(t.formatNumber(e.win_rate,1))+"%")])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.profitFactor")))]),a("span",[t._v(t._s(t.formatNumber(e.profit_factor,2)))])]),a("span",{staticClass:"stat"},[a("label",[t._v(t._s(t.$t("dashboard.ranking.trades")))]),a("span",[t._v(t._s(e.total_trades))])])])]),a("div",{staticClass:"rank-pnl-bar"},[a("div",{staticClass:"bar-fill",class:e.total_pnl>=0?"positive":"negative",style:{width:"".concat(Math.min(100,Math.abs(e.total_pnl)/t.maxStrategyPnl*100),"%")}})])])}),0)])]),a("div",{staticClass:"table-row"},[a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"stock"}}),a("span",[t._v(t._s(t.$t("dashboard.currentPositions")))])],1),a("div",{staticClass:"panel-badge"},[t._v(t._s((t.summary.current_positions||[]).length))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.positionColumns,"data-source":t.summary.current_positions,rowKey:"id",pagination:!1,size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"symbol",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e))]),a("span",{staticClass:"symbol-strategy"},[t._v(t._s(s.strategy_name))])])]}},{key:"side",fn:function(e){return[a("span",{staticClass:"side-tag",class:"long"===e?"long":"short"},[t._v(" "+t._s("long"===e?"LONG":"SHORT")+" ")])]}},{key:"unrealized_pnl",fn:function(e,s){return[a("div",{staticClass:"pnl-cell"},[a("span",{class:e>=0?"positive":"negative"},[t._v(" "+t._s(e>=0?"+":"")+"$"+t._s(t.formatNumber(e))+" ")]),a("span",{staticClass:"pnl-percent",class:s.pnl_percent>=0?"positive":"negative"},[t._v(" "+t._s(s.pnl_percent>=0?"+":"")+t._s(t.formatNumber(s.pnl_percent))+"% ")])])]}}])})],1),a("div",{staticClass:"table-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"history"}}),a("span",[t._v(t._s(t.$t("dashboard.recentTrades")))])],1)]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.columns,"data-source":t.summary.recent_trades,rowKey:"id",pagination:{pageSize:8,size:"small"},size:"small",scroll:{x:"max-content"}},scopedSlots:t._u([{key:"type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"profit",fn:function(e,s){return[a("span",{class:"--"!==t.formatProfitValue(e,s)?e>=0?"positive":"negative":""},[t._v(" "+t._s(t.formatProfitValue(e,s))+" ")])]}},{key:"time",fn:function(e){return[a("span",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(e)))])]}}])})],1)]),a("div",{staticClass:"chart-panel orders-panel"},[a("div",{staticClass:"panel-header"},[a("div",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"unordered-list"}}),a("span",[t._v(t._s(t.$t("dashboard.pendingOrders")))]),a("a-tooltip",{attrs:{title:t.soundEnabled?t.$t("dashboard.clickToMute"):t.$t("dashboard.clickToUnmute")}},[a("a-icon",{staticClass:"sound-toggle",class:{"sound-off":!t.soundEnabled},attrs:{type:t.soundEnabled?"sound":"audio-muted"},on:{click:t.toggleSound}})],1)],1),a("div",{staticClass:"panel-badge"},[t._v(t._s(t.ordersPagination.total))])]),a("a-table",{staticClass:"pro-table",attrs:{columns:t.orderColumns,"data-source":t.pendingOrders,rowKey:"id",pagination:{current:t.ordersPagination.current,pageSize:t.ordersPagination.pageSize,total:t.ordersPagination.total,showSizeChanger:!0,size:"small",showTotal:function(a){return t.$t("dashboard.totalOrders",{total:a})}},size:"small",loading:t.ordersLoading,scroll:{x:1200}},on:{change:t.handleOrdersTableChange},scopedSlots:t._u([{key:"strategy_name",fn:function(e,s){return[a("div",{staticClass:"symbol-cell"},[a("span",{staticClass:"symbol-name"},[t._v(t._s(e||"-"))]),a("span",{staticClass:"symbol-strategy"},[t._v("ID: "+t._s(s.strategy_id))])])]}},{key:"symbol",fn:function(e){return[a("span",{staticClass:"symbol-tag"},[t._v(t._s(e))])]}},{key:"signal_type",fn:function(e){return[a("span",{staticClass:"type-tag",class:t.getTypeClass(e)},[t._v(" "+t._s(t.getSignalTypeText(e))+" ")])]}},{key:"exchange",fn:function(e,s){return[s&&(s.exchange_display||s.exchange_id||e)?a("span",{staticClass:"exchange-tag",class:(s.exchange_display||s.exchange_id||e).toLowerCase()},[t._v(" "+t._s(String(s.exchange_display||s.exchange_id||e).toUpperCase())+" ")]):a("span",{staticClass:"text-muted"},[t._v("-")]),s&&s.market_type?a("div",{staticClass:"market-type"},[t._v(" "+t._s(String(s.market_type).toUpperCase())+" ")]):t._e()]}},{key:"notify",fn:function(e,s){return[a("div",{staticClass:"notify-icons"},[t._l(s&&s.notify_channels?s.notify_channels:[],function(e){return a("a-tooltip",{key:"".concat(s.id,"-").concat(e),attrs:{title:String(e)}},[a("a-icon",{staticClass:"notify-icon",attrs:{type:t.getNotifyIconType(e)}})],1)}),s&&s.notify_channels&&0!==s.notify_channels.length?t._e():a("span",{staticClass:"text-muted"},[t._v("-")])],2)]}},{key:"status",fn:function(e,s){return[a("span",{staticClass:"status-tag",class:e},[t._v(" "+t._s(t.getStatusText(e))+" ")]),"failed"===e&&s.error_message?a("div",{staticClass:"error-hint"},[a("a-tooltip",{attrs:{title:s.error_message}},[a("a-icon",{attrs:{type:"exclamation-circle"}}),a("span",[t._v(t._s(t.$t("dashboard.viewError")))])],1)],1):t._e()]}},{key:"amount",fn:function(e,s){return[a("div",[t._v(t._s(t.formatNumber(e,8)))]),s.filled_amount?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.$t("dashboard.filled"))+": "+t._s(t.formatNumber(s.filled_amount,8))+" ")]):t._e()]}},{key:"price",fn:function(e,s){return[s.filled_price?a("div",[t._v(t._s(t.formatNumber(s.filled_price)))]):a("div",{staticClass:"text-muted"},[t._v("-")])]}},{key:"time_info",fn:function(e,s){return[a("div",{staticClass:"time-cell"},[t._v(t._s(t.formatTime(s.created_at)))]),s.executed_at?a("div",{staticClass:"sub-text"},[t._v(" "+t._s(t.formatTime(s.executed_at))+" ")]):t._e()]}}])})],1)])},r=[],n=e(81127),i=e(56252),o=e(57532),l=e(2403),d=e(76338),c=(e(74423),e(15014)),u=e(75769),p={summary:"/api/dashboard/summary",pendingOrders:"/api/dashboard/pendingOrders"};function h(){return(0,u.Ay)({url:p.summary,method:"get"})}function f(t){return(0,u.Ay)({url:p.pendingOrders,method:"get",params:t})}var m=e(95353),g={name:"Dashboard",data:function(){return{summary:{ai_strategy_count:0,indicator_strategy_count:0,total_equity:0,total_pnl:0,total_realized_pnl:0,total_unrealized_pnl:0,performance:{},strategy_stats:[],daily_pnl_chart:[],strategy_pnl_chart:[],monthly_returns:[],hourly_distribution:[],calendar_months:[],recent_trades:[],current_positions:[]},currentCalendarIndex:0,pieChart:null,drawdownChart:null,hourlyChart:null,pendingOrders:[],ordersLoading:!1,ordersPagination:{current:1,pageSize:20,total:0},orderPollTimer:null,lastOrderId:0,orderPollIntervalMs:5e3,soundEnabled:!0,beepCtx:null}},computed:(0,d.A)((0,d.A)({},(0,m.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},performance:function(){return this.summary.performance||{}},strategyStats:function(){return this.summary.strategy_stats||[]},maxStrategyPnl:function(){var t=this.strategyStats;return t.length?Math.max.apply(Math,(0,l.A)(t.map(function(t){return Math.abs(t.total_pnl||0)})).concat([1])):1},avgTradesPerDay:function(){var t=this.summary.daily_pnl_chart||[],a=t.length||1,e=this.performance.total_trades||0;return(e/a).toFixed(1)},calendarMonths:function(){return this.summary.calendar_months||[]},currentCalendarMonth:function(){var t=this.calendarMonths;return t.length&&t[this.currentCalendarIndex]||null},currentMonthLabel:function(){var t=this.currentCalendarMonth;if(!t)return"-";var a=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];return"".concat(a[t.month-1]," ").concat(t.year)},weekdays:function(){return["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]},calendarFirstDayOffset:function(){var t=this.currentCalendarMonth;return t?t.first_weekday:0},orderStrategyFilters:function(){var t,a=Array.isArray(this.pendingOrders)?this.pendingOrders:[],e=new Map,s=(0,o.A)(a);try{for(s.s();!(t=s.n()).done;){var r=t.value,n=r&&r.strategy_id;if(void 0!==n&&null!==n&&!e.has(String(n))){var i=r&&r.strategy_name?String(r.strategy_name):"",l=i?"".concat(i," (ID: ").concat(n,")"):"ID: ".concat(n);e.set(String(n),{text:l,value:String(n)})}}}catch(d){s.e(d)}finally{s.f()}return Array.from(e.values()).sort(function(t,a){return String(t.text).localeCompare(String(a.text))})},columns:function(){var t=this;return[{title:this.$t("dashboard.table.time"),dataIndex:"created_at",scopedSlots:{customRender:"time"},width:150},{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",width:100},{title:this.$t("dashboard.table.type"),dataIndex:"type",scopedSlots:{customRender:"type"},width:90},{title:this.$t("dashboard.table.price"),dataIndex:"price",customRender:function(a){return t.formatNumber(a)},width:100},{title:this.$t("dashboard.table.profit"),dataIndex:"profit",scopedSlots:{customRender:"profit"},align:"right",width:100}]},positionColumns:function(){var t=this;return[{title:this.$t("dashboard.table.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"}},{title:this.$t("dashboard.table.side"),dataIndex:"side",scopedSlots:{customRender:"side"}},{title:this.$t("dashboard.table.size"),dataIndex:"size",customRender:function(a){return t.formatNumber(a,4)}},{title:this.$t("dashboard.table.entryPrice"),dataIndex:"entry_price",customRender:function(a){return t.formatNumber(a)}},{title:this.$t("dashboard.table.pnl"),dataIndex:"unrealized_pnl",scopedSlots:{customRender:"unrealized_pnl"},align:"right"}]},orderColumns:function(){return[{title:this.$t("dashboard.orderTable.strategy"),dataIndex:"strategy_name",scopedSlots:{customRender:"strategy_name"},filters:this.orderStrategyFilters,filterMultiple:!0,onFilter:function(t,a){return String(a&&a.strategy_id)===String(t)},width:150},{title:this.$t("dashboard.orderTable.exchange"),dataIndex:"exchange_id",scopedSlots:{customRender:"exchange"},width:120},{title:this.$t("dashboard.orderTable.notify"),dataIndex:"notify_channels",scopedSlots:{customRender:"notify"},width:100},{title:this.$t("dashboard.orderTable.symbol"),dataIndex:"symbol",scopedSlots:{customRender:"symbol"},width:110},{title:this.$t("dashboard.orderTable.signalType"),dataIndex:"signal_type",scopedSlots:{customRender:"signal_type"},width:100},{title:this.$t("dashboard.orderTable.amount"),dataIndex:"amount",scopedSlots:{customRender:"amount"},width:130},{title:this.$t("dashboard.orderTable.price"),dataIndex:"filled_price",scopedSlots:{customRender:"price"},width:100},{title:this.$t("dashboard.orderTable.status"),dataIndex:"status",scopedSlots:{customRender:"status"},width:130},{title:this.$t("dashboard.orderTable.timeInfo"),dataIndex:"created_at",scopedSlots:{customRender:"time_info"},width:160}]}}),mounted:function(){this.fetchData(),this.fetchPendingOrders(),this.startOrderPolling(),window.addEventListener("resize",this.handleResize)},beforeDestroy:function(){this.stopOrderPolling(),window.removeEventListener("resize",this.handleResize),this.pieChart&&this.pieChart.dispose(),this.drawdownChart&&this.drawdownChart.dispose(),this.hourlyChart&&this.hourlyChart.dispose()},methods:{fetchData:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,h();case 1:e=a.v,1===e.code&&(t.summary=(0,d.A)((0,d.A)({},t.summary),e.data),t.$nextTick(function(){t.initCharts()})),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},fetchPendingOrders:function(t,a){var e=this;return(0,i.A)((0,n.A)().m(function s(){var r,i,o,l;return(0,n.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return e.ordersLoading=!0,s.p=1,r=t||e.ordersPagination.current||1,i=a||e.ordersPagination.pageSize||20,s.n=2,f({page:r,pageSize:i});case 2:o=s.v,1===o.code&&(l=o.data||{},e.pendingOrders=l.list||[],e.ordersPagination.current=Number(l.page||r||1),e.ordersPagination.pageSize=Number(l.pageSize||i||20),e.ordersPagination.total=Number(l.total||0)),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,e.ordersLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},playOrderBeep:function(){if(this.soundEnabled)try{var t=window.AudioContext||window.webkitAudioContext;if(!t)return;this.beepCtx||(this.beepCtx=new t);var a=this.beepCtx;"suspended"===a.state&&"function"===typeof a.resume&&a.resume().catch(function(){});var e=function(t,e){var s=a.createOscillator(),r=a.createGain();s.type="sine",s.frequency.value=e,r.gain.value=.08,s.connect(r),r.connect(a.destination),s.start(t),s.stop(t+.12)},s=a.currentTime;e(s,880),e(s+.18,1100)}catch(r){}},startOrderPolling:function(){var t=this;this.stopOrderPolling(),this.initLastOrderId(),this.orderPollTimer=setInterval(function(){t.pollNewOrders()},this.orderPollIntervalMs)},stopOrderPolling:function(){this.orderPollTimer&&(clearInterval(this.orderPollTimer),this.orderPollTimer=null)},initLastOrderId:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:1});case 1:e=a.v,1===e.code&&e.data&&e.data.list&&e.data.list.length>0&&(t.lastOrderId=e.data.list[0].id||0),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},pollNewOrders:function(){var t=this;return(0,i.A)((0,n.A)().m(function a(){var e,s,r,i,l,d,c,u;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f({page:1,pageSize:10});case 1:if(e=a.v,1===e.code&&e.data&&e.data.list){a.n=2;break}return a.a(2);case 2:if(s=e.data.list||[],0!==s.length){a.n=3;break}return a.a(2);case 3:r=!1,i=t.lastOrderId,l=(0,o.A)(s);try{for(l.s();!(d=l.n()).done;)c=d.value,u=c.id||0,u>t.lastOrderId&&(r=!0,u>i&&(i=u))}catch(n){l.e(n)}finally{l.f()}r&&(t.lastOrderId=i,t.playOrderBeep(),t.fetchPendingOrders(),t.$notification.info({message:t.$t("dashboard.newOrderNotify"),description:t.$t("dashboard.newOrderDesc"),duration:4})),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[0,4]])}))()},toggleSound:function(){this.soundEnabled=!this.soundEnabled,this.soundEnabled?this.$message.success(this.$t("dashboard.soundEnabled")):this.$message.info(this.$t("dashboard.soundDisabled"))},handleOrdersTableChange:function(t){var a=t&&t.current?t.current:1,e=t&&t.pageSize?t.pageSize:this.ordersPagination.pageSize||20;this.ordersPagination.current=a,this.ordersPagination.pageSize=e,this.fetchPendingOrders(a,e)},getTypeClass:function(t){if(!t)return"";var a=t.toLowerCase();return a.includes("open_long")||a.includes("add_long")?"long":a.includes("open_short")||a.includes("add_short")?"short":a.includes("close_long")?"close-long":a.includes("close_short")?"close-short":""},getSignalTypeColor:function(t){return t?(t=t.toLowerCase(),t.includes("open_long")||t.includes("add_long")?"green":t.includes("open_short")||t.includes("add_short")?"red":t.includes("close_long")?"orange":t.includes("close_short")?"purple":"blue"):"default"},getSignalTypeText:function(t){if(!t)return"-";var a={open_long:this.$t("dashboard.signalType.openLong"),open_short:this.$t("dashboard.signalType.openShort"),close_long:this.$t("dashboard.signalType.closeLong"),close_short:this.$t("dashboard.signalType.closeShort"),add_long:this.$t("dashboard.signalType.addLong"),add_short:this.$t("dashboard.signalType.addShort")};return a[t.toLowerCase()]||t.toUpperCase()},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red",cancelled:"default"};return a[t]||"default"},getStatusText:function(t){if(!t)return"-";var a={pending:this.$t("dashboard.status.pending"),processing:this.$t("dashboard.status.processing"),completed:this.$t("dashboard.status.completed"),failed:this.$t("dashboard.status.failed"),cancelled:this.$t("dashboard.status.cancelled")};return a[t.toLowerCase()]||t.toUpperCase()},getNotifyIconType:function(t){var a=String(t||"").trim().toLowerCase(),e={browser:"bell",webhook:"link",discord:"comment",telegram:"message",tg:"message",tele:"message",email:"mail",phone:"phone"};return e[a]||"notification"},getExchangeTagColor:function(t){var a=String(t||"").trim().toLowerCase(),e={binance:"gold",okx:"purple",bitget:"cyan",signal:"geekblue"};return e[a]||"blue"},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a})},formatProfitValue:function(t,a){if(null===t||void 0===t)return"--";var e=parseFloat(t),s=["open_long","open_short","add_long","add_short"];if(0===e&&a&&s.includes(a.type))return"--";if(Math.abs(e)<1e-6)return a&&s.includes(a.type)?"--":"$0.00";var r=e>=0?"+":"";return"".concat(r,"$").concat(this.formatNumber(e))},formatCompactNumber:function(t){if(void 0===t||null===t)return"0";var a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"k":a>=100?Math.round(t):t.toFixed(0)},prevMonth:function(){this.currentCalendarIndex0&&this.currentCalendarIndex--},getDayProfit:function(t){var a=this.currentCalendarMonth;if(!a||!a.days)return null;var e=String(t).padStart(2,"0");return void 0!==a.days[e]?a.days[e]:null},getDayClass:function(t){var a=this.getDayProfit(t);return null===a?"no-data":a>0?"profit":a<0?"loss":"zero"},formatTime:function(t){if(!t)return"-";try{var a;if("string"===typeof t&&t.includes("-")&&t.includes(":"))a=new Date(t);else{if(!("number"===typeof t||"string"===typeof t&&/^\d+$/.test(t)))return"-";var e="string"===typeof t?parseInt(t,10):t,s=e<1e12?1e3*e:e;a=new Date(s)}return isNaN(a.getTime())?"-":a.toLocaleString()}catch(r){return"-"}},initCharts:function(){this.initPieChart(),this.initDrawdownChart(),this.initHourlyChart()},initPieChart:function(){var t=this,a=this.$refs.pieChart;if(a){this.pieChart=c.Ts(a);var e=Array.isArray(this.summary.strategy_stats)?this.summary.strategy_stats:[],s=Array.isArray(this.summary.strategy_pnl_chart)?this.summary.strategy_pnl_chart:[],r=[];r=e.length>0?e.map(function(t){var a=t&&t.strategy_name?String(t.strategy_name):"-",e=Number(t&&t.total_pnl?t.total_pnl:0),s=Number(t&&t.total_trades?t.total_trades:0),r=0!==e?Math.abs(e):s;return{name:a,value:r,signedValue:e,trades:s}}).filter(function(t){return t.value>0}):s.map(function(t){var a=t&&t.name?String(t.name):"-",e=Number(t&&t.value?t.value:0);return{name:a,value:Math.abs(e),signedValue:e}}).filter(function(t){return t.value>0});var n=this.isDarkTheme,i=n?"#9ca3af":"#6b7280",o=[new c.fA.W4(0,0,1,1,[{offset:0,color:"#3b82f6"},{offset:1,color:"#1d4ed8"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#8b5cf6"},{offset:1,color:"#6d28d9"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#10b981"},{offset:1,color:"#059669"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#f59e0b"},{offset:1,color:"#d97706"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#ec4899"},{offset:1,color:"#be185d"}]),new c.fA.W4(0,0,1,1,[{offset:0,color:"#06b6d4"},{offset:1,color:"#0891b2"}])],l={backgroundColor:"transparent",tooltip:{trigger:"item",backgroundColor:n?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:n?"#374151":"#e5e7eb",textStyle:{color:n?"#f3f4f6":"#1f2937"},formatter:function(a){var e=a&&a.data&&"number"===typeof a.data.signedValue?a.data.signedValue:0,s=(e>=0?"+":"")+t.formatNumber(e,2),r=e>=0?"#10b981":"#ef4444";return'\n

\n
'.concat(a.name,'
\n
占比 ').concat(a.percent,'%
\n
PNL $').concat(s,"
\n
\n ")}},legend:{bottom:10,left:"center",itemWidth:12,itemHeight:12,itemGap:16,textStyle:{color:i,fontSize:11}},color:o,series:[{name:"策略分布",type:"pie",radius:["50%","75%"],center:["50%","45%"],avoidLabelOverlap:!1,itemStyle:{borderRadius:6,borderColor:n?"#1f2937":"#ffffff",borderWidth:3},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",color:n?"#f3f4f6":"#1f2937"},scaleSize:8},labelLine:{show:!1},data:r.length>0?r:[{value:1,name:this.$t("dashboard.noData"),signedValue:0}]}]};this.pieChart.setOption(l)}},initDrawdownChart:function(){var t=this,a=this.$refs.drawdownChart;if(a){this.drawdownChart=c.Ts(a);var e,s=(this.summary.daily_pnl_chart||[]).map(function(t){return t.date}),r=(this.summary.daily_pnl_chart||[]).map(function(t){return Number(t.profit||0)}),n=[],i=0,l=(0,o.A)(r);try{for(l.s();!(e=l.n()).done;){var d=e.value;i+=Number(d||0),n.push(i)}}catch(y){l.e(y)}finally{l.f()}var u=-1/0,p=0,h=0,f=n.map(function(t,a){u=Math.max(u,t);var e=Number((t-u).toFixed(2));return e\n
').concat(s,'
\n
\n \n \n ').concat(t.$t("dashboard.drawdown")||"Drawdown",'\n \n -$').concat(n,'\n
\n
\n
\n
\n \n ')}},grid:{left:55,right:20,bottom:35,top:20,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return t.slice(5)}}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:g,fontSize:10,formatter:function(t){return Math.abs(t)>=1e3?"-$"+(Math.abs(t)/1e3).toFixed(1)+"k":0===t?"0":"-$"+Math.abs(t)}},splitLine:{lineStyle:{color:v,type:[4,4]}},max:0},series:[{name:this.$t("dashboard.drawdown")||"Drawdown",type:"line",data:f,smooth:.3,showSymbol:!1,lineStyle:{width:2.5,color:new c.fA.W4(0,0,1,0,[{offset:0,color:"#ef4444"},{offset:.5,color:"#f87171"},{offset:1,color:"#fca5a5"}]),shadowColor:"rgba(239, 68, 68, 0.4)",shadowBlur:8,shadowOffsetY:4},areaStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:m?"rgba(239, 68, 68, 0.4)":"rgba(239, 68, 68, 0.25)"},{offset:.5,color:m?"rgba(248, 113, 113, 0.15)":"rgba(248, 113, 113, 0.1)"},{offset:1,color:"transparent"}])},markPoint:p<0?{symbol:"pin",symbolSize:45,itemStyle:{color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#f87171"},{offset:1,color:"#dc2626"}]),shadowColor:"rgba(239, 68, 68, 0.5)",shadowBlur:10},label:{show:!0,color:"#fff",fontSize:10,fontWeight:"bold",formatter:function(){return t.$t("dashboard.label.maxDrawdownPoint")||"MAX"}},data:[{name:this.$t("dashboard.maxDrawdown")||"Max Drawdown",coord:[h,p]}]}:void 0,markLine:{silent:!0,symbol:"none",lineStyle:{color:m?"#52525b":"#a1a1aa",type:"dashed",width:1},data:[{yAxis:0}],label:{show:!1}}}]};this.drawdownChart.setOption(b)}},initHourlyChart:function(){var t=this,a=this.$refs.hourlyChart;if(a){this.hourlyChart=c.Ts(a);var e=this.summary.hourly_distribution||[],s=e.map(function(t){return"".concat(String(t.hour).padStart(2,"0"),":00")}),r=e.map(function(t){return t.count||0}),n=e.map(function(t){return t.profit||0}),i=this.isDarkTheme,l=i?"#9ca3af":"#6b7280",d=i?"rgba(75, 85, 99, 0.3)":"rgba(229, 231, 235, 0.8)",u={backgroundColor:"transparent",tooltip:{trigger:"axis",backgroundColor:i?"rgba(17, 24, 39, 0.95)":"rgba(255, 255, 255, 0.95)",borderColor:i?"#374151":"#e5e7eb",textStyle:{color:i?"#f3f4f6":"#1f2937"},formatter:function(a){var e,s=Array.isArray(a)?a:[],r=s[0]&&s[0].axisValue?s[0].axisValue:"",n=0,d=0,c=t.$t("dashboard.tradeCount")||"Trade Count",u=t.$t("dashboard.profit")||"Profit",p=t.$t("dashboard.unit.trades")||"",h=(0,o.A)(s);try{for(h.s();!(e=h.n()).done;){var f=e.value;f.seriesName===c&&(n=f.data||0),f.seriesName===u&&(d=f.data||0)}}catch(v){h.e(v)}finally{h.f()}var m=d>=0?"#10b981":"#ef4444",g=(d>=0?"+":"")+t.formatNumber(d,2);return'\n
\n
'.concat(r,'
\n
').concat(c,' ').concat(n," ").concat(p,'
\n
').concat(u,' $').concat(g,"
\n
\n ")}},grid:{left:50,right:20,bottom:30,top:10,containLabel:!1},xAxis:{type:"category",data:s,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10,interval:3}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:l,fontSize:10},splitLine:{lineStyle:{color:d,type:"dashed"}}},series:[{name:this.$t("dashboard.tradeCount")||"Trade Count",type:"bar",data:r,barMaxWidth:16,itemStyle:{borderRadius:[3,3,0,0],color:new c.fA.W4(0,0,0,1,[{offset:0,color:"#60a5fa"},{offset:1,color:"#3b82f6"}])}},{name:this.$t("dashboard.profit")||"Profit",type:"line",data:n,smooth:!0,showSymbol:!1,lineStyle:{width:2,color:"#a855f7"}}]};this.hourlyChart.setOption(u)}},handleResize:function(){this.pieChart&&this.pieChart.resize(),this.drawdownChart&&this.drawdownChart.resize(),this.hourlyChart&&this.hourlyChart.resize()}}},v=g,b=e(845),y=(0,b.A)(v,s,r,!1,null,"16dc1b35",null),_=y.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/447.1f8e0f21.js b/frontend/dist/js/447.1f8e0f21.js deleted file mode 100644 index 8321565..0000000 --- a/frontend/dist/js/447.1f8e0f21.js +++ /dev/null @@ -1,18 +0,0 @@ -(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[447],{87108:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(44735),s=i(15863),l=i(81127),c=i(56252),u=(i(6011),i(18787)),d=i(76338),h=(i(74423),i(85471)),p=i(95353),f=i(75769),v=i(35038),g=i(505),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(57532),x=i(15237),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(75314),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[];function P(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],i=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,o.A)(t)+" is not iterable")}var L=i(26297),R=i(2403),F=function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)};function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#131722",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2e39",gridLineColor:"#1f2943",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2e39",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#1f2943"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"5f0b12e1",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='
'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(62611),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"b17e86c2",null),ua=ca.exports},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(81127),n=a(56252),o=a(76338),l=(a(2892),a(84841)),d=a(55434),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"f0405968",null),v=g.exports},84841:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(75769);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/472.4317bd73.js b/frontend/dist/js/472.4317bd73.js new file mode 100644 index 0000000..ecea5f9 --- /dev/null +++ b/frontend/dist/js/472.4317bd73.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[472],{39472:function(t,e,a){a.r(e),a.d(e,{default:function(){return v}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-manage-page",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"page-header"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"team"}}),e("span",[t._v(t._s(t.$t("userManage.title")||"User Management"))])],1),e("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("userManage.description")||"Manage system users, roles and permissions"))])]),e("a-tabs",{staticClass:"manage-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"users",attrs:{tab:t.$t("userManage.tabUsers")||"User Management"}},[e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{attrs:{type:"primary"},on:{click:t.showCreateModal}},[e("a-icon",{attrs:{type:"user-add"}}),t._v(" "+t._s(t.$t("userManage.createUser")||"Create User")+" ")],1),e("a-button",{on:{click:t.loadUsers}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("userManage.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.columns,dataSource:t.users,loading:t.loading,pagination:t.pagination,rowKey:function(t){return t.id}},on:{change:t.handleTableChange},scopedSlots:t._u([{key:"status",fn:function(a){return[e("a-tag",{attrs:{color:"active"===a?"green":"red"}},[t._v(" "+t._s("active"===a?t.$t("userManage.active")||"Active":t.$t("userManage.disabled")||"Disabled")+" ")])]}},{key:"role",fn:function(a){return[e("a-tag",{attrs:{color:t.getRoleColor(a)}},[t._v(" "+t._s(t.getRoleLabel(a))+" ")])]}},{key:"last_login_at",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v(t._s(t.$t("userManage.neverLogin")||"Never"))])]}},{key:"credits",fn:function(a){return[e("span",{staticClass:"credits-value"},[t._v(t._s(t.formatCredits(a)))])]}},{key:"vip_expires_at",fn:function(a){return[a&&t.isVipActive(a)?[e("a-tag",{attrs:{color:"gold"}},[e("a-icon",{attrs:{type:"crown"}}),t._v(" "+t._s(t.formatDate(a))+" ")],1)]:e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"action",fn:function(a,s){return[e("a-space",[e("a-tooltip",{attrs:{title:t.$t("common.edit")||"Edit"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showEditModal(s)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.adjustCredits")||"Adjust Credits"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showCreditsModal(s)}}},[e("a-icon",{staticStyle:{color:"#722ed1"},attrs:{type:"wallet"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.setVip")||"Set VIP"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showVipModal(s)}}},[e("a-icon",{staticStyle:{color:"#faad14"},attrs:{type:"crown"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showResetPasswordModal(s)}}},[e("a-icon",{attrs:{type:"key"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("common.delete")||"Delete"}},[e("a-popconfirm",{attrs:{title:t.$t("userManage.confirmDelete")||"Are you sure to delete this user?"},on:{confirm:function(e){return t.handleDelete(s.id)}}},[e("a-button",{attrs:{type:"link",size:"small",disabled:s.id===t.currentUserId}},[e("a-icon",{staticStyle:{color:"#ff4d4f"},attrs:{type:"delete"}})],1)],1)],1)],1)]}}])})],1)],1),e("a-tab-pane",{key:"strategies",attrs:{tab:t.$t("systemOverview.tabTitle")||"System Overview"}},[t.strategySummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.total_strategies||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalStrategies")||"Total Strategies"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"play-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.running_strategies||0))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.strategySummary.running_live_strategies||0)+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.strategySummary.running_signal_strategies||0)+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.runningStrategies")||"Running"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.strategySummary.total_capital)))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatNumber(t.strategySummary.live_capital))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatNumber(t.strategySummary.signal_capital))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalCapital")||"Total Capital"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",style:{background:(t.strategySummary.total_pnl||0)>=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(81127),n=a(56252),o=a(76338),l=a(84841),d=a(55434),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"f0405968",null),v=g.exports},84841:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(75769);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/488-legacy.c093a9e0.js b/frontend/dist/js/488-legacy.c093a9e0.js new file mode 100644 index 0000000..237a756 --- /dev/null +++ b/frontend/dist/js/488-legacy.c093a9e0.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[488],{45487:function(t,a,e){e.r(a),e.d(a,{default:function(){return w}});e(62010),e(9868);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-asset-analysis-page",class:{"theme-dark":t.isDarkTheme}},[t.opportunities.length>0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(81127),r=e(56252),o=e(2403),l=e(76338),c=(e(28706),e(74423),e(34782),e(27495),e(21699),e(25440),e(95353)),p=e(86805),u=e(44146),y=e(83973),d=(e(42762),function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,wrapClassName:t.isDarkTheme?"qd-dark-modal":"",maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal",class:{"theme-dark":t.isDarkTheme}},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right"},style:{color:t.isDarkTheme?"rgba(255,255,255,0.75)":"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{style:{marginTop:"16px",color:t.isDarkTheme?"rgba(255,255,255,0.75)":"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])}),m=[],h=(e(26099),e(75769)),k="/api/polymarket";function v(t){return(0,h.Ay)({url:"".concat(k,"/analyze"),method:"post",data:t,timeout:12e4})}function g(t){return(0,h.Ay)({url:"".concat(k,"/history"),method:"get",params:t})}var _={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,v({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,r.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,g({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},b=_,f=e(845),C=(0,f.A)(b,d,m,!1,null,"67e891d2",null),S=C.exports,$={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],QuickTradePanel:y.A,PolymarketAnalysisModal:S},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,o.A)(this.opportunities),(0,o.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,r.A)((0,n.A)().m(function e(){var s,i,r;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,u.r9)(i);case 2:r=e.v,r&&1===r.code&&Array.isArray(r.data)&&(a.opportunities=r.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),r=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",r)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},A=$,T=(0,f.A)(A,s,i,!1,null,"443699fa",null),w=T.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/185-legacy.0a1e2706.js b/frontend/dist/js/506-legacy.07ea73fa.js similarity index 59% rename from frontend/dist/js/185-legacy.0a1e2706.js rename to frontend/dist/js/506-legacy.07ea73fa.js index ed6936e..caea3bc 100644 --- a/frontend/dist/js/185-legacy.0a1e2706.js +++ b/frontend/dist/js/506-legacy.07ea73fa.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[185],{16185:function(t,e,o){o.r(e),o.d(e,{default:function(){return R}});o(74423),o(62010),o(9868),o(21699);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],a=o(2403),r=o(81127),n=o(56252),l=o(76338),c=(o(93693),o(2970)),u=(o(28706),o(2008),o(50113),o(62062),o(26910),o(2892),o(79432),o(26099),o(16034),o(27495),o(47764),o(11392),o(23500),o(62953),o(95353)),p=o(75769);function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function d(t){return(0,p.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function f(t,e){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function v(t){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function _(){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"get"})}function g(t){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function y(t,e){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function b(t){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function C(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function $(){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"get"})}function k(t){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function w(t,e){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function A(t){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function S(){return(0,p.Ay)({url:"/api/portfolio/groups",method:"get"})}function P(t){return(0,p.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function M(){return(0,p.Ay)({url:"/api/market/types",method:"get"})}var N=o(84841),x={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,N.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,S();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,$();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,m(i);case 2:a=o.v,a&&1===a.code&&(e.positions=a.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,h(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,_();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,P({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,f(t.editingPosition.id,i);case 3:a=e.v,e.n=6;break;case 4:return e.n=5,d(i);case 5:a=e.v;case 6:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,v(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n,l,c,u,p;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(a=t.alertPosition)||void 0===a?void 0:a.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,w(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,k(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(p=u)||void 0===p?void 0:p.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,A(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,A(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,y(t.editingMonitor.id,i);case 4:a=e.v,e.n=7;break;case 5:return e.n=6,g(i);case 6:a=e.v;case 7:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,r.A)().m(function s(){var i;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,y(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a,n,l,c,u;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,C(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(a=i.data)||void 0===a?void 0:a.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,b(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},F=x,T=o(845),q=(0,T.A)(F,s,i,!1,null,"398d904c",null),R=q.exports},84841:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return r},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return a},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function a(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function r(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[506],{27506:function(t,e,o){o.r(e),o.d(e,{default:function(){return _}});o(74423),o(62010),o(9868),o(21699);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],r=o(2403),a=o(81127),n=o(56252),l=o(76338),c=(o(93693),o(2970)),u=(o(28706),o(2008),o(50113),o(62062),o(26910),o(2892),o(79432),o(26099),o(16034),o(27495),o(47764),o(11392),o(23500),o(62953),o(95353)),p=o(24364),m=o(84841),d={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.f)();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,(0,p.qu)();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.iO)();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,a.A)().m(function o(){var s,i,r;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,(0,p.Dt)(i);case 2:r=o.v,r&&1===r.code&&(e.positions=r.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,a.A)().m(function o(){var s,i;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,(0,p.bC)(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,(0,p.w1)();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,a.A)().m(function o(){var s,i;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,(0,p._3)({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(o,s){var i,r,n;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,(0,p.Xg)(t.editingPosition.id,i);case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,p.Ps)(i);case 5:r=e.v;case 6:r&&1===r.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=r)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,(0,p.$p)(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,r.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(o,s){var i,r,n,l,c,u,m;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(r=t.alertPosition)||void 0===r?void 0:r.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,(0,p.cg)(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,(0,p.Iw)(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(m=u)||void 0===m?void 0:m.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,(0,p.qS)(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,(0,p.qS)(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,r.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(o,s){var i,r,n;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,(0,p.sk)(t.editingMonitor.id,i);case 4:r=e.v,e.n=7;break;case 5:return e.n=6,(0,p.yr)(i);case 6:r=e.v;case 7:r&&1===r.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=r)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,a.A)().m(function s(){var i;return(0,a.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,p.sk)(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s,i,r,n,l,c,u;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,(0,p.aU)(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(r=i.data)||void 0===r?void 0:r.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,(0,p.ei)(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},f=d,v=o(845),h=(0,v.A)(f,s,i,!1,null,"398d904c",null),_=h.exports},24364:function(t,e,o){o.d(e,{$p:function(){return n},Dt:function(){return i},Iw:function(){return v},Ps:function(){return r},Xg:function(){return a},_3:function(){return y},aU:function(){return d},bC:function(){return l},cg:function(){return h},ei:function(){return m},f:function(){return g},iO:function(){return b},qS:function(){return _},qu:function(){return f},sk:function(){return p},w1:function(){return c},yr:function(){return u}});var s=o(75769);function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function r(t){return(0,s.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function a(t,e){return(0,s.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function n(t){return(0,s.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function c(){return(0,s.Ay)({url:"/api/portfolio/monitors",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function p(t,e){return(0,s.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function m(t){return(0,s.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,s.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function f(){return(0,s.Ay)({url:"/api/portfolio/alerts",method:"get"})}function v(t){return(0,s.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function h(t,e){return(0,s.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function _(t){return(0,s.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function g(){return(0,s.Ay)({url:"/api/portfolio/groups",method:"get"})}function y(t){return(0,s.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function b(){return(0,s.Ay)({url:"/api/market/types",method:"get"})}},84841:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return a},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return r},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function a(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/185.9e7876ef.js b/frontend/dist/js/506.7a09321c.js similarity index 59% rename from frontend/dist/js/185.9e7876ef.js rename to frontend/dist/js/506.7a09321c.js index 6d35cc4..3c2501d 100644 --- a/frontend/dist/js/185.9e7876ef.js +++ b/frontend/dist/js/506.7a09321c.js @@ -1 +1 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[185],{16185:function(t,e,o){o.r(e),o.d(e,{default:function(){return R}});o(74423);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],a=o(2403),r=o(81127),n=o(56252),l=o(76338),c=(o(93693),o(2970)),u=o(95353),p=o(75769);function m(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function d(t){return(0,p.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function f(t,e){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function v(t){return(0,p.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,p.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function _(){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"get"})}function g(t){return(0,p.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function y(t,e){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function b(t){return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function C(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,p.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function $(){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"get"})}function k(t){return(0,p.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function w(t,e){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function A(t){return(0,p.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function S(){return(0,p.Ay)({url:"/api/portfolio/groups",method:"get"})}function P(t){return(0,p.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function M(){return(0,p.Ay)({url:"/api/market/types",method:"get"})}var N=o(84841),x={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,N.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,S();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,$();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,M();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,m(i);case 2:a=o.v,a&&1===a.code&&(e.positions=a.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,h(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,_();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,r.A)().m(function o(){var s,i;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,P({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,f(t.editingPosition.id,i);case 3:a=e.v,e.n=6;break;case 4:return e.n=5,d(i);case 5:a=e.v;case 6:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,v(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n,l,c,u,p;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(a=t.alertPosition)||void 0===a?void 0:a.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,w(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,k(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(p=u)||void 0===p?void 0:p.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,A(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){var o;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,A(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,a.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,r.A)().m(function e(){return(0,r.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,r.A)().m(function e(o,s){var i,a,n;return(0,r.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,y(t.editingMonitor.id,i);case 4:a=e.v,e.n=7;break;case 5:return e.n=6,g(i);case 6:a=e.v;case 7:a&&1===a.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=a)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,r.A)().m(function s(){var i;return(0,r.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,y(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s,i,a,n,l,c,u;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,C(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(a=i.data)||void 0===a?void 0:a.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,r.A)().m(function o(){var s;return(0,r.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,b(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,a.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},F=x,T=o(845),q=(0,T.A)(F,s,i,!1,null,"398d904c",null),R=q.exports},84841:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return r},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return a},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function a(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function r(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[506],{27506:function(t,e,o){o.r(e),o.d(e,{default:function(){return _}});o(74423);var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"portfolio-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded}},[e("div",{staticClass:"summary-section"},[e("div",{staticClass:"summary-card total-value"},[e("div",{staticClass:"card-icon"},[e("a-icon",{attrs:{type:"wallet"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalValue")))]),e("div",{staticClass:"card-value"},[e("span",{staticClass:"currency"},[t._v("$")]),e("span",{staticClass:"amount"},[t._v(t._s(t.formatNumber(t.summary.total_market_value)))])]),void 0!==t.summary.today_change?e("div",{staticClass:"card-sub"},[e("span",{class:t.summary.today_change>=0?"positive":"negative"},[t._v(" "+t._s(t.$t("portfolio.summary.today"))+": "+t._s(t.summary.today_change>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_change))+" ")])]):t._e()])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon cost"},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalCost")))]),e("div",{staticClass:"card-value"},[t._v("$"+t._s(t.formatNumber(t.summary.total_cost)))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon",class:t.summary.total_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:t.summary.total_pnl>=0?"rise":"fall"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.totalPnl")))]),e("div",{staticClass:"card-value",class:t.summary.total_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.total_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.total_pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(t.summary.total_pnl_percent>=0?"+":"")+t._s(t.summary.total_pnl_percent)+"%)")])])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"card-icon positions"},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.positionCount")))]),e("div",{staticClass:"card-value"},[t._v(" "+t._s(t.summary.position_count)+" "),t.profitLossStats.profit>0||t.profitLossStats.loss>0?e("span",{staticClass:"position-detail"},[t._v(" ("),e("span",{staticClass:"positive"},[t._v(t._s(t.profitLossStats.profit))]),t._v("/"),e("span",{staticClass:"negative"},[t._v(t._s(t.profitLossStats.loss))]),t._v(") ")]):t._e()]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.profitLossRatio"))+" ")])])])]),e("div",{staticClass:"summary-section secondary"},[e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon today",class:t.summary.today_pnl>=0?"profit":"loss"},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.todayPnl")))]),e("div",{staticClass:"card-value",class:t.summary.today_pnl>=0?"positive":"negative"},[t._v(" "+t._s(t.summary.today_pnl>=0?"+":"")+"$"+t._s(t.formatNumber(t.summary.today_pnl||0))+" ")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon best"},[e("a-icon",{attrs:{type:"trophy"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.bestPerformer")))]),t.bestPerformer?e("div",{staticClass:"card-value small positive"},[t._v(" "+t._s(t.bestPerformer.symbol)+" +"+t._s(t.bestPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini"},[e("div",{staticClass:"card-icon worst"},[e("a-icon",{attrs:{type:"warning"}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.worstPerformer")))]),t.worstPerformer?e("div",{staticClass:"card-value small negative"},[t._v(" "+t._s(t.worstPerformer.symbol)+" "+t._s(t.worstPerformer.pnl_percent)+"% ")]):e("div",{staticClass:"card-value small"},[t._v("-")])])]),e("div",{staticClass:"summary-card mini sync-card"},[e("div",{staticClass:"card-icon sync",class:{syncing:t.isSyncing}},[e("a-icon",{attrs:{type:"sync",spin:t.isSyncing}})],1),e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-label"},[t._v(t._s(t.$t("portfolio.summary.priceSync")))]),e("div",{staticClass:"card-value small"},[t._v(" "+t._s(t.lastSyncTime?t.formatSyncTime(t.lastSyncTime):"-")+" ")]),e("div",{staticClass:"card-sub"},[t._v(" "+t._s(t.$t("portfolio.summary.syncInterval"))+": 30s "),e("a-button",{staticStyle:{padding:"0","margin-left":"8px"},attrs:{type:"link",size:"small",loading:t.isSyncing},on:{click:t.refreshPrices}},[t.isSyncing?t._e():e("a-icon",{attrs:{type:"reload"}})],1)],1)])])]),e("div",{staticClass:"main-content"},[e("div",{staticClass:"positions-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"stock"}}),e("span",[t._v(t._s(t.$t("portfolio.positions.title")))])],1),e("div",{staticClass:"header-actions"},[e("a-radio-group",{staticStyle:{"margin-right":"12px"},attrs:{size:"small"},model:{value:t.viewMode,callback:function(e){t.viewMode=e},expression:"viewMode"}},[e("a-radio-button",{attrs:{value:"grid"}},[e("a-icon",{attrs:{type:"appstore"}})],1),e("a-radio-button",{attrs:{value:"group"}},[e("a-icon",{attrs:{type:"folder"}})],1)],1),"grid"===t.viewMode?e("a-select",{staticStyle:{width:"150px","margin-right":"12px"},attrs:{placeholder:t.$t("portfolio.groups.all"),"allow-clear":""},on:{change:t.filterByGroup},model:{value:t.selectedGroup,callback:function(e){t.selectedGroup=e},expression:"selectedGroup"}},[e("a-select-option",{attrs:{value:""}},[t._v(t._s(t.$t("portfolio.groups.all")))]),e("a-select-option",{attrs:{value:"__ungrouped__"}},[t._v(t._s(t.$t("portfolio.groups.ungrouped")))]),t._l(t.groups,function(o){return e("a-select-option",{key:o.name,attrs:{value:o.name}},[t._v(" "+t._s(o.name)+" ("+t._s(o.count)+") ")])})],2):t._e(),e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.add"))+" ")],1)],1)]),e("a-spin",{attrs:{spinning:t.loadingPositions}},[e("div",{staticClass:"positions-list"},[0===t.positions.length?e("div",{staticClass:"empty-state"},[e("a-empty",{attrs:{description:t.$t("portfolio.positions.empty")}},[e("a-button",{attrs:{type:"primary"},on:{click:function(e){t.showAddPositionModal=!0}}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.positions.addFirst"))+" ")],1)],1)],1):"grid"===t.viewMode?e("div",{staticClass:"position-grid"},t._l(t.filteredPositions,function(o){return e("div",{key:o.id,staticClass:"position-card",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))]),o.group_name?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{size:"small",color:"blue"}},[e("a-icon",{attrs:{type:"folder"}}),t._v(" "+t._s(o.group_name)+" ")],1):t._e()],1),e("div",{staticClass:"position-actions"},[e("a-tooltip",{attrs:{title:t.hasAlertForPosition(o.id)?t.$t("portfolio.alerts.editAlert"):t.$t("portfolio.alerts.addAlert")}},[e("a-button",{class:{"has-alert":t.hasAlertForPosition(o.id)},attrs:{type:"link",size:"small"},on:{click:function(e){return t.showAddAlertForPosition(o)}}},[e("a-icon",{attrs:{type:"bell",theme:t.hasAlertForPosition(o.id)?"filled":"outlined"}})],1)],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-body"},[e("div",{staticClass:"price-row"},[e("div",{staticClass:"current-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.currentPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"entry-price"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.entryPrice")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.entry_price)))])])]),e("div",{staticClass:"quantity-row"},[e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity")))]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.side")))]),e("a-tag",{attrs:{color:"long"===o.side?"green":"red",size:"small"}},[t._v(" "+t._s("long"===o.side?t.$t("portfolio.positions.long"):t.$t("portfolio.positions.short"))+" ")])],1),e("div",{staticClass:"item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.marketValue")))]),e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.market_value)))])])])]),e("div",{staticClass:"position-footer"},[e("div",{staticClass:"pnl"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.pnl")))]),e("span",{staticClass:"value",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])])}),0):e("div",{staticClass:"position-collapse-view"},[e("a-collapse",{attrs:{bordered:!1},model:{value:t.activeGroups,callback:function(e){t.activeGroups=e},expression:"activeGroups"}},[t.ungroupedPositions.length>0?e("a-collapse-panel",{key:"__ungrouped__",staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"inbox"}}),t._v(" "+t._s(t.$t("portfolio.groups.ungrouped"))+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(t.ungroupedPositions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(t.ungroupedPositions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(t.ungroupedPositions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(t.ungroupedPositions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(t.ungroupedPositions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2):t._e(),t._l(t.groupsWithPositions,function(o){return e("a-collapse-panel",{key:o.name,staticClass:"group-panel"},[e("template",{slot:"header"},[e("div",{staticClass:"group-header"},[e("span",{staticClass:"group-name"},[e("a-icon",{staticStyle:{"margin-right":"8px",color:"#1890ff"},attrs:{type:"folder"}}),t._v(" "+t._s(o.name)+" ")],1),e("span",{staticClass:"group-stats"},[e("span",{staticClass:"count"},[t._v(t._s(o.positions.length)+" "+t._s(t.$t("portfolio.positions.items")))]),e("span",{staticClass:"group-pnl",class:t.getGroupPnl(o.positions)>=0?"positive":"negative"},[t._v(" "+t._s(t.getGroupPnl(o.positions)>=0?"+":"")+"$"+t._s(t.formatNumber(t.getGroupPnl(o.positions)))+" ")])])])]),e("div",{staticClass:"position-grid compact"},t._l(o.positions,function(o){return e("div",{key:o.id,staticClass:"position-card compact",class:{profit:o.pnl>=0,loss:o.pnl<0}},[e("div",{staticClass:"position-header"},[e("div",{staticClass:"symbol-info"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(t.getMarketName(o.market)))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))]),e("span",{staticClass:"name"},[t._v(t._s(o.name))])],1),e("div",{staticClass:"position-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editPosition(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.positions.deleteConfirm")},on:{confirm:function(e){return t.deletePosition(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)]),e("div",{staticClass:"position-compact-body"},[e("div",{staticClass:"compact-item"},[e("span",{staticClass:"value"},[t._v(t._s(t.getCurrencySymbol(o.market))+t._s(t.formatPrice(o.current_price)))]),e("span",{staticClass:"change",class:o.price_change>=0?"up":"down"},[t._v(" "+t._s(o.price_change>=0?"▲":"▼")+t._s(Math.abs(o.price_change_percent).toFixed(2))+"% ")])]),e("div",{staticClass:"compact-item"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.positions.quantity"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatNumber(o.quantity,4)))])]),e("div",{staticClass:"compact-item pnl",class:o.pnl>=0?"positive":"negative"},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.getCurrencySymbol(o.market))+t._s(t.formatNumber(o.pnl))+" "),e("span",{staticClass:"percent"},[t._v("("+t._s(o.pnl_percent>=0?"+":"")+t._s(o.pnl_percent)+"%)")])])])])}),0)],2)})],2)],1)])])],1),e("div",{ref:"monitorsSection",staticClass:"monitors-section"},[e("div",{staticClass:"section-header"},[e("h3",[e("a-icon",{attrs:{type:"eye"}}),e("span",[t._v(t._s(t.$t("portfolio.monitors.title")))])],1),e("a-button",{attrs:{type:"primary"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.add"))+" ")],1)],1),e("a-spin",{attrs:{spinning:t.loadingMonitors}},[e("div",{staticClass:"monitors-list"},[0===t.monitors.length?e("div",{staticClass:"empty-state small"},[e("a-empty",{attrs:{description:t.$t("portfolio.monitors.empty"),image:t.simpleImage}},[e("a-button",{attrs:{type:"primary",size:"small"},on:{click:t.openAddMonitorModal}},[e("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("portfolio.monitors.addFirst"))+" ")],1)],1)],1):e("div",t._l(t.monitors,function(o){return e("div",{key:o.id,staticClass:"monitor-card"},[e("div",{staticClass:"monitor-header"},[e("div",{staticClass:"monitor-name"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(o.name))])],1),e("a-switch",{attrs:{checked:o.is_active,size:"small"},on:{change:function(e){return t.toggleMonitor(o.id,e)}}})],1),e("div",{staticClass:"monitor-body"},[e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.interval"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.getIntervalText(o.config.interval_minutes)))])]),e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.form.monitorScope"))+":")]),e("span",{staticClass:"value"},[t.getMonitorPositionIds(o).length>0?[e("a-tooltip",[e("template",{slot:"title"},t._l(t.getMonitorPositionIds(o),function(o){return e("div",{key:o},[t._v(" "+t._s(t.getPositionNameById(o))+" ")])}),0),e("span",{staticClass:"scope-selected"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.getMonitorPositionIds(o).length,total:t.positions.length}))+" ")])],2)]:e("span",{staticClass:"scope-all"},[t._v(t._s(t.$t("portfolio.form.allPositions")))])],2)]),o.last_run_at?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.lastRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.last_run_at)))])]):t._e(),o.next_run_at&&o.is_active?e("div",{staticClass:"monitor-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.nextRun"))+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatTime(o.next_run_at)))])]):t._e(),o.notification_config.channels?e("div",{staticClass:"monitor-channels"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.monitors.channels"))+":")]),t._l(o.notification_config.channels,function(o){return e("a-tag",{key:o,attrs:{size:"small"}},[t._v(" "+t._s(o)+" ")])})],2):t._e()]),e("div",{staticClass:"monitor-actions"},[e("a-button",{attrs:{type:"link",size:"small",loading:t.runningMonitor===o.id},on:{click:function(e){return t.runMonitorNow(o.id)}}},[e("a-icon",{attrs:{type:"play-circle"}}),t._v(" "+t._s(t.$t("portfolio.monitors.runNow"))+" ")],1),e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.editMonitor(o)}}},[e("a-icon",{attrs:{type:"edit"}})],1),e("a-popconfirm",{attrs:{title:t.$t("portfolio.monitors.deleteConfirm")},on:{confirm:function(e){return t.deleteMonitor(o.id)}}},[e("a-button",{staticClass:"delete-btn",attrs:{type:"link",size:"small"}},[e("a-icon",{attrs:{type:"delete"}})],1)],1)],1)])}),0)])])],1)]),e("a-modal",{attrs:{title:t.editingPosition?t.$t("portfolio.modal.editPosition"):t.$t("portfolio.modal.addPosition"),visible:t.showAddPositionModal,confirmLoading:t.savingPosition,width:"600px"},on:{ok:t.handleSavePosition,cancel:t.closePositionModal}},[e("a-form",{attrs:{form:t.positionForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.market")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["market",{rules:[{required:!0,message:t.$t("portfolio.form.marketRequired")}]}],expression:"['market', { rules: [{ required: true, message: $t('portfolio.form.marketRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.selectMarket"),disabled:!!t.editingPosition},on:{change:t.handleMarketChange}},t._l(t.marketTypes,function(o){return e("a-select-option",{key:o.value,attrs:{value:o.value}},[t._v(" "+t._s(t.$t(o.i18nKey))+" ")])}),1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol",{rules:[{required:!0,message:t.$t("portfolio.form.symbolRequired")}]}],expression:"['symbol', { rules: [{ required: true, message: $t('portfolio.form.symbolRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{"show-search":"",placeholder:t.$t("portfolio.form.searchSymbol"),"default-active-first-option":!1,"show-arrow":!1,"filter-option":!1,"not-found-content":null,disabled:!!t.editingPosition},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect}},[t._l(t.symbolSearchResults,function(o){return e("a-select-option",{key:o.symbol,attrs:{value:o.symbol}},[e("div",{staticClass:"symbol-option"},[e("strong",[t._v(t._s(o.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(o.name))])])])}),t.symbolSearchKeyword&&0===t.symbolSearchResults.length?e("a-select-option",{key:"__manual__"+t.symbolSearchKeyword.toUpperCase(),attrs:{value:t.symbolSearchKeyword.toUpperCase()}},[e("div",{staticClass:"symbol-option manual-input"},[e("a-icon",{staticStyle:{"margin-right":"6px",color:"#1890ff"},attrs:{type:"edit"}}),e("span",[t._v(t._s(t.$t("portfolio.form.useAsSymbol"))+" ")]),e("strong",{staticStyle:{color:"#1890ff"}},[t._v(t._s(t.symbolSearchKeyword.toUpperCase()))]),e("span",[t._v(" "+t._s(t.$t("portfolio.form.asSymbolCode")))])],1)]):t._e()],2),e("div",{staticClass:"symbol-hint",staticStyle:{"font-size":"12px",color:"#999","margin-top":"4px"}},[t._v(" "+t._s(t.$t("portfolio.form.symbolHint"))+" ")])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.side")}},[e("a-radio-group",{directives:[{name:"decorator",rawName:"v-decorator",value:["side",{initialValue:"long"}],expression:"['side', { initialValue: 'long' }]"}],attrs:{disabled:!!t.editingPosition}},[e("a-radio-button",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")))]),e("a-radio-button",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.quantity")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["quantity",{rules:[{required:!0,message:t.$t("portfolio.form.quantityRequired")}]}],expression:"['quantity', { rules: [{ required: true, message: $t('portfolio.form.quantityRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:1,placeholder:t.$t("portfolio.form.enterQuantity")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.entryPrice")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entry_price",{rules:[{required:!0,message:t.$t("portfolio.form.entryPriceRequired")}]}],expression:"['entry_price', { rules: [{ required: true, message: $t('portfolio.form.entryPriceRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{min:1e-8,step:.01,placeholder:t.$t("portfolio.form.enterEntryPrice")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{rows:2,placeholder:t.$t("portfolio.form.enterNotes")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.group")}},[e("a-auto-complete",{directives:[{name:"decorator",rawName:"v-decorator",value:["group_name"],expression:"['group_name']"}],attrs:{placeholder:t.$t("portfolio.form.enterGroup"),dataSource:t.groupNames}})],1)],1)],1),e("a-modal",{attrs:{title:t.editingAlert?t.$t("portfolio.modal.editAlert"):t.$t("portfolio.modal.addAlert"),visible:t.showAddAlertModal,width:"560px"},on:{cancel:t.closeAlertModal}},[e("template",{slot:"footer"},[e("div",{staticClass:"alert-modal-footer"},[t.editingAlert?e("a-button",{attrs:{type:"danger",ghost:"",loading:t.deletingAlert},on:{click:t.confirmDeleteAlert}},[e("a-icon",{attrs:{type:"delete"}}),t._v(" "+t._s(t.$t("portfolio.alerts.delete"))+" ")],1):e("span"),e("div",{staticClass:"footer-right"},[e("a-button",{on:{click:t.closeAlertModal}},[t._v(t._s(t.$t("common.cancel")))]),e("a-button",{attrs:{type:"primary",loading:t.savingAlert},on:{click:t.handleSaveAlert}},[t._v(" "+t._s(t.$t("common.save"))+" ")])],1)],1)]),e("a-form",{attrs:{form:t.alertForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.symbol")}},[e("div",{staticClass:"alert-symbol-info"},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["symbol"],expression:"['symbol']"}],staticClass:"symbol-input",attrs:{disabled:""}}),t.alertPosition?e("div",{staticClass:"current-price-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("portfolio.alerts.currentPrice"))+":")]),e("span",{staticClass:"price"},[t._v("$"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price)))])]):t._e()],1)]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.alertType")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["alert_type",{initialValue:"price_above",rules:[{required:!0}]}],expression:"['alert_type', { initialValue: 'price_above', rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:"price_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"rise"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceAbove"))+" ")],1),e("a-select-option",{attrs:{value:"price_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"fall"}}),t._v(" "+t._s(t.$t("portfolio.alerts.priceBelow"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_above"}},[e("a-icon",{staticStyle:{color:"#52c41a","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlAbove"))+" ")],1),e("a-select-option",{attrs:{value:"pnl_below"}},[e("a-icon",{staticStyle:{color:"#f5222d","margin-right":"6px"},attrs:{type:"dollar"}}),t._v(" "+t._s(t.$t("portfolio.alerts.pnlBelow"))+" ")],1)],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.threshold")}},[e("div",{staticClass:"threshold-input-wrapper"},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["threshold",{rules:[{required:!0,message:t.$t("portfolio.alerts.thresholdRequired")}]}],expression:"['threshold', { rules: [{ required: true, message: $t('portfolio.alerts.thresholdRequired') }] }]"}],staticStyle:{width:"100%"},attrs:{step:t.alertTypeIsPrice?.01:1,placeholder:t.alertTypeIsPrice?t.$t("portfolio.alerts.enterPrice"):t.$t("portfolio.alerts.enterPercent"),precision:t.alertTypeIsPrice?4:2}}),t.alertTypeIsPrice?e("span",{staticClass:"alert-unit"},[t._v("$")]):e("span",{staticClass:"alert-unit"},[t._v("%")])],1),t.alertPosition&&t.alertTypeIsPrice?e("div",{staticClass:"threshold-hint"},[t._v(" "+t._s(t.$t("portfolio.alerts.currentPriceHint"))+": $"+t._s(t.formatNumber(t.alertPosition.current_price||t.alertPosition.entry_price))+" ")]):t._e()]),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.repeatInterval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["repeat_interval",{initialValue:0}],expression:"['repeat_interval', { initialValue: 0 }]"}]},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("portfolio.alerts.noRepeat")))]),e("a-select-option",{attrs:{value:5}},[t._v(t._s(t.$t("portfolio.alerts.every5min")))]),e("a-select-option",{attrs:{value:15}},[t._v(t._s(t.$t("portfolio.alerts.every15min")))]),e("a-select-option",{attrs:{value:30}},[t._v(t._s(t.$t("portfolio.alerts.every30min")))]),e("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("portfolio.alerts.every1hour")))]),e("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("portfolio.alerts.every4hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("portfolio.alerts.onceDaily")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.alertChannels,callback:function(e){t.alertChannels=e},expression:"alertChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[e("a-icon",{attrs:{type:"bell"}}),t._v(" "+t._s(t.$t("portfolio.form.browser"))+" ")],1),e("a-checkbox",{attrs:{value:"telegram"}},[e("a-icon",{attrs:{type:"message"}}),t._v(" Telegram ")],1),e("a-checkbox",{attrs:{value:"email"}},[e("a-icon",{attrs:{type:"mail"}}),t._v(" "+t._s(t.$t("portfolio.form.email"))+" ")],1)],1)],1),t.alertChannels.includes("telegram")||t.alertChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.alerts.enabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["is_active",{initialValue:!0,valuePropName:"checked"}],expression:"['is_active', { initialValue: true, valuePropName: 'checked' }]"}]}),e("span",{staticClass:"switch-label"},[t._v(t._s(t.$t("portfolio.alerts.enabledDesc")))])],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notes")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["notes"],expression:"['notes']"}],attrs:{placeholder:t.$t("portfolio.form.enterNotes"),autoSize:{minRows:2,maxRows:4}}})],1)],1)],2),e("a-modal",{attrs:{title:t.editingMonitor?t.$t("portfolio.modal.editMonitor"):t.$t("portfolio.modal.addMonitor"),visible:t.showAddMonitorModal,confirmLoading:t.savingMonitor,width:"600px"},on:{ok:t.handleSaveMonitor,cancel:t.closeMonitorModal}},[e("a-form",{attrs:{form:t.monitorForm,"label-col":{span:6},"wrapper-col":{span:16}}},[e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorName")}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["name",{rules:[{required:!0,message:t.$t("portfolio.form.monitorNameRequired")}]}],expression:"['name', { rules: [{ required: true, message: $t('portfolio.form.monitorNameRequired') }] }]"}],attrs:{placeholder:t.$t("portfolio.form.enterMonitorName")}})],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.interval")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["interval_minutes",{initialValue:60,rules:[{required:!0}]}],expression:"['interval_minutes', { initialValue: 60, rules: [{ required: true }] }]"}]},[e("a-select-option",{attrs:{value:5}},[t._v("5 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:10}},[t._v("10 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("portfolio.form.minutes")))]),e("a-select-option",{attrs:{value:60}},[t._v("1 "+t._s(t.$t("portfolio.form.hour")))]),e("a-select-option",{attrs:{value:120}},[t._v("2 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:240}},[t._v("4 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:480}},[t._v("8 "+t._s(t.$t("portfolio.form.hours")))]),e("a-select-option",{attrs:{value:1440}},[t._v("24 "+t._s(t.$t("portfolio.form.hours")))])],1)],1),e("a-form-item",{attrs:{label:t.$t("portfolio.form.notifyChannels")}},[e("a-checkbox-group",{model:{value:t.monitorChannels,callback:function(e){t.monitorChannels=e},expression:"monitorChannels"}},[e("a-checkbox",{attrs:{value:"browser"}},[t._v(t._s(t.$t("portfolio.form.browser")))]),e("a-checkbox",{attrs:{value:"telegram"}},[t._v("Telegram")]),e("a-checkbox",{attrs:{value:"email"}},[t._v(t._s(t.$t("portfolio.form.email")))])],1)],1),t.monitorChannels.includes("telegram")||t.monitorChannels.includes("email")?e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info",showIcon:""},scopedSlots:t._u([{key:"message",fn:function(){return[e("span",[t._v(" "+t._s(t.$t("portfolio.form.notificationFromProfile"))+" "),e("router-link",{staticStyle:{"margin-left":"8px"},attrs:{to:"/profile"}},[e("a-icon",{attrs:{type:"setting"}}),t._v(" "+t._s(t.$t("portfolio.form.goToProfile"))+" ")],1)],1)]},proxy:!0}],null,!1,440262090)}):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.monitorScope")}},[e("a-radio-group",{on:{change:t.handleMonitorScopeChange},model:{value:t.monitorScope,callback:function(e){t.monitorScope=e},expression:"monitorScope"}},[e("a-radio",{attrs:{value:"all"}},[t._v(t._s(t.$t("portfolio.form.allPositions")))]),e("a-radio",{attrs:{value:"selected"}},[t._v(t._s(t.$t("portfolio.form.selectedPositions")))])],1)],1),"selected"===t.monitorScope?e("a-form-item",{attrs:{label:t.$t("portfolio.form.selectPositions")}},[e("a-checkbox-group",{staticClass:"position-checkbox-group",model:{value:t.selectedMonitorPositions,callback:function(e){t.selectedMonitorPositions=e},expression:"selectedMonitorPositions"}},t._l(t.positions,function(o){return e("div",{key:o.id,staticClass:"position-checkbox-item"},[e("a-checkbox",{staticClass:"position-checkbox",attrs:{value:o.id}},[e("div",{staticClass:"position-checkbox-label"},[e("div",{staticClass:"position-left"},[e("a-tag",{attrs:{color:t.getMarketColor(o.market),size:"small"}},[t._v(t._s(o.market))]),e("span",{staticClass:"symbol"},[t._v(t._s(o.symbol))])],1),e("div",{staticClass:"position-middle"},[e("span",{staticClass:"name",attrs:{title:o.name}},[t._v(t._s(o.name))])]),e("div",{staticClass:"position-right"},[e("span",{class:["pnl",o.pnl>=0?"positive":"negative"]},[t._v(" "+t._s(o.pnl>=0?"+":"")+t._s(t.formatNumber(o.pnl_percent))+"% ")])])])])],1)}),0),e("div",{staticClass:"position-select-actions"},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.selectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.selectAll"))+" ")]),e("a-divider",{attrs:{type:"vertical"}}),e("a-button",{attrs:{type:"link",size:"small"},on:{click:t.deselectAllPositions}},[t._v(" "+t._s(t.$t("portfolio.form.deselectAll"))+" ")]),e("span",{staticClass:"selected-count"},[t._v(" "+t._s(t.$t("portfolio.form.selectedCount",{count:t.selectedMonitorPositions.length,total:t.positions.length}))+" ")])],1)],1):t._e(),e("a-form-item",{attrs:{label:t.$t("portfolio.form.customPrompt")}},[e("a-textarea",{directives:[{name:"decorator",rawName:"v-decorator",value:["prompt"],expression:"['prompt']"}],attrs:{rows:3,placeholder:t.$t("portfolio.form.customPromptPlaceholder")}})],1)],1)],1)],1)},i=[],r=o(2403),a=o(81127),n=o(56252),l=o(76338),c=(o(93693),o(2970)),u=o(95353),p=o(24364),m=o(84841),d={name:"Portfolio",props:{embedded:{type:Boolean,default:!1}},data:function(){return{simpleImage:c.Ay.PRESENTED_IMAGE_SIMPLE,summary:{total_cost:0,total_market_value:0,total_pnl:0,total_pnl_percent:0,position_count:0,market_distribution:[],today_pnl:0,today_change:0},positions:[],loadingPositions:!1,showAddPositionModal:!1,savingPosition:!1,editingPosition:null,positionForm:null,monitors:[],loadingMonitors:!1,showAddMonitorModal:!1,savingMonitor:!1,editingMonitor:null,monitorForm:null,runningMonitor:null,marketTypes:[],symbolSearchResults:[],searchTimer:null,selectedSymbolName:"",symbolSearchKeyword:"",priceRefreshTimer:null,lastSyncTime:null,isSyncing:!1,groups:[],selectedGroup:"",viewMode:"grid",activeGroups:[],alerts:[],loadingAlerts:!1,showAddAlertModal:!1,savingAlert:!1,deletingAlert:!1,editingAlert:null,alertForm:null,alertPosition:null,alertChannels:["browser"],monitorChannels:["browser"],monitorScope:"all",selectedMonitorPositions:[],userNotificationSettings:{default_channels:["browser"],telegram_bot_token:"",telegram_chat_id:"",email:"",phone:"",discord_webhook:"",webhook_url:"",webhook_token:""}}},computed:(0,l.A)((0,l.A)({},(0,u.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},selectedChannels:function(){return this.monitorChannels||[]},selectedAlertChannels:function(){return this.alertChannels||[]},filteredPositions:function(){var t=this;return this.selectedGroup?"__ungrouped__"===this.selectedGroup?this.positions.filter(function(t){return!t.group_name}):this.positions.filter(function(e){return e.group_name===t.selectedGroup}):this.positions},groupNames:function(){return this.groups.map(function(t){return t.name})},alertTypeIsPrice:function(){if(!this.alertForm)return!0;var t=this.alertForm.getFieldValue("alert_type");return t&&t.startsWith("price_")},profitLossStats:function(){var t=this.positions.filter(function(t){return t.pnl>=0}).length,e=this.positions.filter(function(t){return t.pnl<0}).length;return{profit:t,loss:e}},bestPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)>(t.pnl_percent||0)?e:t},null)},worstPerformer:function(){return 0===this.positions.length?null:this.positions.reduce(function(t,e){return!t||(e.pnl_percent||0)<(t.pnl_percent||0)?e:t},null)},ungroupedPositions:function(){return this.positions.filter(function(t){return!t.group_name})},groupsWithPositions:function(){var t={};return this.positions.forEach(function(e){e.group_name&&(t[e.group_name]||(t[e.group_name]={name:e.group_name,positions:[]}),t[e.group_name].positions.push(e))}),Object.values(t).sort(function(t,e){return t.name.localeCompare(e.name)})}}),created:function(){this.positionForm=this.$form.createForm(this,{name:"position_form"}),this.monitorForm=this.$form.createForm(this,{name:"monitor_form"}),this.alertForm=this.$form.createForm(this,{name:"alert_form"}),this.loadMarketTypes(),this.loadData()},mounted:function(){var t=this;this.priceRefreshTimer=setInterval(function(){t.refreshPrices()},3e4),this.loadUserNotificationSettings()},beforeDestroy:function(){this.priceRefreshTimer&&clearInterval(this.priceRefreshTimer),this.searchTimer&&clearTimeout(this.searchTimer)},methods:{loadUserNotificationSettings:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,m.vF)();case 1:o=e.v,1===o.code&&o.data&&(t.userNotificationSettings={default_channels:o.data.default_channels||["browser"],telegram_bot_token:o.data.telegram_bot_token||"",telegram_chat_id:o.data.telegram_chat_id||"",email:o.data.email||"",phone:o.data.phone||"",discord_webhook:o.data.discord_webhook||"",webhook_url:o.data.webhook_url||"",webhook_token:o.data.webhook_token||""}),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadData:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,Promise.all([t.loadPositions(),t.loadSummary(),t.loadMonitors(),t.loadGroups(),t.loadAlerts()]);case 1:t.lastSyncTime=new Date;case 2:return e.a(2)}},e)}))()},filterByGroup:function(){},refreshPrices:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!t.isSyncing){e.n=1;break}return e.a(2);case 1:return t.isSyncing=!0,e.p=2,e.n=3,Promise.all([t.loadPositions(!0),t.loadSummary(!0)]);case 3:t.lastSyncTime=new Date;case 4:return e.p=4,t.isSyncing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},formatSyncTime:function(t){if(!t)return"-";var e=new Date,o=Math.floor((e-t)/1e3);return o<60?this.$t("portfolio.summary.justNow"):o<3600?"".concat(Math.floor(o/60)," ").concat(this.$t("portfolio.form.minutes")).concat(this.$t("portfolio.summary.ago")):t.toLocaleTimeString()},getGroupPnl:function(t){return t.reduce(function(t,e){return t+(e.pnl||0)},0)},loadGroups:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.f)();case 1:o=e.v,o&&1===o.code&&o.data&&(t.groups=o.data.groups||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadAlerts:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingAlerts=!0,e.p=1,e.n=2,(0,p.qu)();case 2:o=e.v,o&&1===o.code&&(t.alerts=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingAlerts=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},loadMarketTypes:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,p.iO)();case 1:o=e.v,o&&1===o.code&&o.data&&(t.marketTypes=o.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}})),e.n=3;break;case 2:e.p=2,e.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return e.a(2)}},e,null,[[0,2]])}))()},loadPositions:function(){var t=arguments,e=this;return(0,n.A)((0,a.A)().m(function o(){var s,i,r;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],e.loadingPositions=!0,o.p=1,i=s?{refresh:"1"}:{},o.n=2,(0,p.Dt)(i);case 2:r=o.v,r&&1===r.code&&(e.positions=r.data||[]),o.n=4;break;case 3:o.p=3,o.v,e.$message.error(e.$t("portfolio.message.loadFailed"));case 4:return o.p=4,e.loadingPositions=!1,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},loadSummary:function(){var t=arguments,e=this;return(0,n.A)((0,a.A)().m(function o(){var s,i;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],o.p=1,o.n=2,(0,p.bC)(s?{refresh:"1"}:{});case 2:i=o.v,i&&1===i.code&&(e.summary=i.data||e.summary),o.n=4;break;case 3:o.p=3,o.v;case 4:return o.a(2)}},o,null,[[1,3]])}))()},loadMonitors:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loadingMonitors=!0,e.p=1,e.n=2,(0,p.w1)();case 2:o=e.v,o&&1===o.code&&(t.monitors=o.data||[]),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,t.loadingMonitors=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleMarketChange:function(t){this.symbolSearchResults=[],this.symbolSearchKeyword="",this.positionForm.setFieldsValue({symbol:""})},handleSymbolSearch:function(t){var e=this;this.symbolSearchKeyword=t||"",this.searchTimer&&clearTimeout(this.searchTimer),!t||t.length<1?this.symbolSearchResults=[]:this.searchTimer=setTimeout((0,n.A)((0,a.A)().m(function o(){var s,i;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:if(s=e.positionForm.getFieldValue("market"),s){o.n=1;break}return o.a(2);case 1:return o.p=1,o.n=2,(0,p._3)({market:s,keyword:t,limit:10});case 2:i=o.v,i&&1===i.code?e.symbolSearchResults=i.data||[]:e.symbolSearchResults=[],o.n=4;break;case 3:o.p=3,o.v,e.symbolSearchResults=[];case 4:return o.a(2)}},o,null,[[1,3]])})),300)},handleSymbolSelect:function(t,e){var o=this.symbolSearchResults.find(function(e){return e.symbol===t});this.selectedSymbolName=o?o.name:"",this.symbolSearchKeyword=""},editPosition:function(t){var e=this;this.editingPosition=t,this.showAddPositionModal=!0,this.$nextTick(function(){e.positionForm.setFieldsValue({market:t.market,symbol:t.symbol,side:t.side,quantity:t.quantity,entry_price:t.entry_price,notes:t.notes,group_name:t.group_name||""})})},handleSavePosition:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:t.positionForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(o,s){var i,r,n;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingPosition=!0,e.p=2,i={market:s.market,symbol:s.symbol.toUpperCase(),side:s.side,quantity:s.quantity,entry_price:s.entry_price,notes:s.notes||"",name:t.selectedSymbolName||"",group_name:s.group_name||""},!t.editingPosition){e.n=4;break}return e.n=3,(0,p.Xg)(t.editingPosition.id,i);case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,p.Ps)(i);case 5:r=e.v;case 6:r&&1===r.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closePositionModal(),t.loadData()):t.$message.error((null===(n=r)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingPosition=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deletePosition:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,(0,p.$p)(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadData()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closePositionModal:function(){this.showAddPositionModal=!1,this.editingPosition=null,this.positionForm.resetFields(),this.symbolSearchResults=[],this.selectedSymbolName="",this.symbolSearchKeyword=""},handleAlertChannelsChange:function(t){this.alertChannels=t||[]},showAddAlertForPosition:function(t){var e=this,o=this.alerts.find(function(e){return e.position_id===t.id});o?this.editAlert(o):(this.editingAlert=null,this.alertPosition=t,this.alertChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){e.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:"price_above",threshold:t.current_price||t.entry_price,repeat_interval:0,is_active:!0,notes:""})}))},editAlert:function(t){var e,o=this;this.editingAlert=t,this.alertPosition=this.positions.find(function(e){return e.id===t.position_id})||{market:t.market,symbol:t.symbol,current_price:0,entry_price:0},this.alertChannels=(0,r.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]),this.showAddAlertModal=!0,this.$nextTick(function(){o.alertForm&&o.alertForm.setFieldsValue({symbol:"".concat(t.market,"/").concat(t.symbol),alert_type:t.alert_type||"price_above",threshold:t.threshold||0,repeat_interval:t.repeat_interval||0,is_active:!1!==t.is_active,notes:t.notes||""})})},handleSaveAlert:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:t.alertForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(o,s){var i,r,n,l,c,u,m;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if(t.savingAlert=!0,e.p=2,l={},t.alertChannels.includes("telegram")&&t.userNotificationSettings.telegram_chat_id&&(l.telegram=t.userNotificationSettings.telegram_chat_id,t.userNotificationSettings.telegram_bot_token&&(l.telegram_bot_token=t.userNotificationSettings.telegram_bot_token)),t.alertChannels.includes("email")&&t.userNotificationSettings.email&&(l.email=t.userNotificationSettings.email),t.alertChannels.includes("phone")&&t.userNotificationSettings.phone&&(l.phone=t.userNotificationSettings.phone),t.alertChannels.includes("discord")&&t.userNotificationSettings.discord_webhook&&(l.discord=t.userNotificationSettings.discord_webhook),t.alertChannels.includes("webhook")&&t.userNotificationSettings.webhook_url&&(l.webhook=t.userNotificationSettings.webhook_url,t.userNotificationSettings.webhook_token&&(l.webhook_token=t.userNotificationSettings.webhook_token)),c={position_id:null===(i=t.alertPosition)||void 0===i?void 0:i.id,market:null===(r=t.alertPosition)||void 0===r?void 0:r.market,symbol:null===(n=t.alertPosition)||void 0===n?void 0:n.symbol,alert_type:s.alert_type,threshold:s.threshold,notification_config:{channels:t.alertChannels.length>0?t.alertChannels:["browser"],targets:l,language:t.$store.getters.lang||"en-US"},is_active:!1!==s.is_active,repeat_interval:s.repeat_interval||0,notes:s.notes||""},!t.editingAlert){e.n=4;break}return e.n=3,(0,p.cg)(t.editingAlert.id,c);case 3:u=e.v,e.n=6;break;case 4:return e.n=5,(0,p.Iw)(c);case 5:u=e.v;case 6:u&&1===u.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeAlertModal(),t.loadAlerts()):t.$message.error((null===(m=u)||void 0===m?void 0:m.msg)||t.$t("portfolio.message.saveFailed")),e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 8:return e.p=8,t.savingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},deleteAlert:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,(0,p.qS)(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadAlerts()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeAlertModal:function(){this.showAddAlertModal=!1,this.editingAlert=null,this.alertPosition=null,this.alertChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.alertForm.resetFields()},confirmDeleteAlert:function(){if(this.editingAlert){var t=this;this.$confirm({title:this.$t("portfolio.alerts.deleteConfirm"),okText:this.$t("common.confirm"),okType:"danger",cancelText:this.$t("common.cancel"),onOk:function(){return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:return e.n=1,t.handleDeleteAlert();case 1:return e.a(2)}},e)}))()}})}},handleDeleteAlert:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){var o;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.editingAlert){e.n=1;break}return e.a(2);case 1:return t.deletingAlert=!0,e.p=2,e.n=3,(0,p.qS)(t.editingAlert.id);case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return t.$message.success(t.$t("portfolio.message.deleteSuccess")),t.closeAlertModal(),e.n=4,t.loadAlerts();case 4:e.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||t.$t("portfolio.message.deleteFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,t.$message.error(t.$t("portfolio.message.deleteFailed"));case 8:return e.p=8,t.deletingAlert=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}))()},focusMonitorsSection:function(){var t=this;this.$nextTick(function(){var e=t.$refs.monitorsSection;e&&"function"===typeof e.scrollIntoView&&e.scrollIntoView({behavior:"smooth",block:"start"})})},openAddMonitorModal:function(){var t=this;this.editingMonitor=null,this.monitorChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[],this.showAddMonitorModal=!0,this.$nextTick(function(){t.monitorForm&&t.monitorForm.resetFields()})},handleMonitorChannelsChange:function(t){this.monitorChannels=t||[]},editMonitor:function(t){var e,o=this;this.editingMonitor=t,this.monitorChannels=(0,r.A)((null===(e=t.notification_config)||void 0===e?void 0:e.channels)||["browser"]);var s=[];if(t.position_ids)if("string"===typeof t.position_ids)try{s=JSON.parse(t.position_ids)||[]}catch(i){s=[]}else Array.isArray(t.position_ids)&&(s=t.position_ids);this.monitorScope=s.length>0?"selected":"all",this.selectedMonitorPositions=s,this.showAddMonitorModal=!0,this.$nextTick(function(){var e,s;o.monitorForm&&o.monitorForm.setFieldsValue({name:t.name,interval_minutes:(null===(e=t.config)||void 0===e?void 0:e.interval_minutes)||60,prompt:(null===(s=t.config)||void 0===s?void 0:s.prompt)||""})})},handleMonitorScopeChange:function(t){this.monitorScope=t.target.value,"all"===t.target.value&&(this.selectedMonitorPositions=[])},selectAllPositions:function(){this.selectedMonitorPositions=this.positions.map(function(t){return t.id})},deselectAllPositions:function(){this.selectedMonitorPositions=[]},handleSaveMonitor:function(){var t=this;return(0,n.A)((0,a.A)().m(function e(){return(0,a.A)().w(function(e){while(1)switch(e.n){case 0:t.monitorForm.validateFields(function(){var e=(0,n.A)((0,a.A)().m(function e(o,s){var i,r,n;return(0,a.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!o){e.n=1;break}return e.a(2);case 1:if("selected"!==t.monitorScope||0!==t.selectedMonitorPositions.length){e.n=2;break}return t.$message.warning(t.$t("portfolio.form.pleaseSelectPositions")),e.a(2);case 2:if(t.savingMonitor=!0,e.p=3,i={name:s.name,monitor_type:"ai",position_ids:"selected"===t.monitorScope?t.selectedMonitorPositions:[],config:{interval_minutes:s.interval_minutes,prompt:s.prompt||"",language:t.$store.getters.lang||"en-US"},notification_config:{channels:t.monitorChannels.length>0?t.monitorChannels:["browser"],targets:{telegram:t.userNotificationSettings.telegram_chat_id||"",telegram_bot_token:t.userNotificationSettings.telegram_bot_token||"",email:t.userNotificationSettings.email||"",phone:t.userNotificationSettings.phone||"",discord:t.userNotificationSettings.discord_webhook||"",webhook:t.userNotificationSettings.webhook_url||"",webhook_token:t.userNotificationSettings.webhook_token||""}},is_active:!0},!t.editingMonitor){e.n=5;break}return e.n=4,(0,p.sk)(t.editingMonitor.id,i);case 4:r=e.v,e.n=7;break;case 5:return e.n=6,(0,p.yr)(i);case 6:r=e.v;case 7:r&&1===r.code?(t.$message.success(t.$t("portfolio.message.saveSuccess")),t.closeMonitorModal(),t.loadMonitors()):t.$message.error((null===(n=r)||void 0===n?void 0:n.msg)||t.$t("portfolio.message.saveFailed")),e.n=9;break;case 8:e.p=8,e.v,t.$message.error(t.$t("portfolio.message.saveFailed"));case 9:return e.p=9,t.savingMonitor=!1,e.f(9);case 10:return e.a(2)}},e,null,[[3,8,9,10]])}));return function(t,o){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},toggleMonitor:function(t,e){var o=this;return(0,n.A)((0,a.A)().m(function s(){var i;return(0,a.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,p.sk)(t,{is_active:e});case 1:i=s.v,i&&1===i.code&&(o.$message.success(e?o.$t("portfolio.message.monitorEnabled"):o.$t("portfolio.message.monitorDisabled")),o.loadMonitors()),s.n=3;break;case 2:s.p=2,s.v,o.$message.error(o.$t("portfolio.message.updateFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},runMonitorNow:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s,i,r,n,l,c,u;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return e.runningMonitor=t,o.p=1,s=e.$store.getters.lang||"en-US",o.n=2,(0,p.aU)(t,{language:s,async:!0});case 2:i=o.v,i&&1===i.code&&("running"===(null===(r=i.data)||void 0===r?void 0:r.status)?(e.$message.success(e.$t("portfolio.message.monitorRunning")),e.$notification.info({message:e.$t("portfolio.monitors.runningTitle"),description:e.$t("portfolio.monitors.runningDesc"),duration:5})):null!==(n=i.data)&&void 0!==n&&n.success?(e.$message.success(e.$t("portfolio.message.monitorRunSuccess")),i.data.analysis&&e.$notification.open({message:e.$t("portfolio.monitors.analysisResult"),description:i.data.analysis.substring(0,500)+(i.data.analysis.length>500?"...":""),duration:0})):null!==(l=i.data)&&void 0!==l&&l.error&&e.$message.error(i.data.error||e.$t("portfolio.message.monitorRunFailed")),e.loadMonitors()),o.n=4;break;case 3:o.p=3,u=o.v,"ECONNABORTED"===u.code||null!==(c=u.message)&&void 0!==c&&c.includes("timeout")?e.$notification.warning({message:e.$t("portfolio.monitors.timeoutTitle"),description:e.$t("portfolio.monitors.timeoutDesc"),duration:8}):e.$message.error(e.$t("portfolio.message.monitorRunFailed"));case 4:return o.p=4,e.runningMonitor=null,o.f(4);case 5:return o.a(2)}},o,null,[[1,3,4,5]])}))()},deleteMonitor:function(t){var e=this;return(0,n.A)((0,a.A)().m(function o(){var s;return(0,a.A)().w(function(o){while(1)switch(o.p=o.n){case 0:return o.p=0,o.n=1,(0,p.ei)(t);case 1:s=o.v,s&&1===s.code?(e.$message.success(e.$t("portfolio.message.deleteSuccess")),e.loadMonitors()):e.$message.error((null===s||void 0===s?void 0:s.msg)||e.$t("portfolio.message.deleteFailed")),o.n=3;break;case 2:o.p=2,o.v,e.$message.error(e.$t("portfolio.message.deleteFailed"));case 3:return o.a(2)}},o,null,[[0,2]])}))()},closeMonitorModal:function(){this.showAddMonitorModal=!1,this.editingMonitor=null,this.monitorForm.resetFields(),this.monitorChannels=(0,r.A)(this.userNotificationSettings.default_channels||["browser"]),this.monitorScope="all",this.selectedMonitorPositions=[]},getMonitorPositionIds:function(t){if(!t.position_ids)return[];if("string"===typeof t.position_ids)try{return JSON.parse(t.position_ids)||[]}catch(e){return[]}return Array.isArray(t.position_ids)?t.position_ids:[]},getPositionNameById:function(t){var e=this.positions.find(function(e){return e.id===t});return e?"".concat(e.symbol," (").concat(e.name||e.market,")"):"#".concat(t)},hasAlertForPosition:function(t){return this.alerts.some(function(e){return e.position_id===t})},getAlertForPosition:function(t){return this.alerts.find(function(e){return e.position_id===t})},getMarketColor:function(t){var e={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return e[t]||"default"},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},getCurrencySymbol:function(t){var e=["USStock","Crypto","Forex","Futures"];return e.includes(t)?"$":"¥"},formatNumber:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t?"0.00":Number(t).toLocaleString("en-US",{minimumFractionDigits:e,maximumFractionDigits:e})},formatPrice:function(t){return t?t>=1e3?this.formatNumber(t,2):t>=1?this.formatNumber(t,4):this.formatNumber(t,6):"0"},formatTime:function(t){if(!t)return"-";var e;if("number"===typeof t)e=new Date(1e3*t);else{if("string"!==typeof t)return"-";e=/^\d+$/.test(t)?new Date(1e3*parseInt(t,10)):new Date(t)}return isNaN(e.getTime())?"-":e.toLocaleString()},getIntervalText:function(t){if(!t)return"-";if(t<60)return"".concat(t," ").concat(this.$t("portfolio.form.minutes"));var e=t/60;return"".concat(e," ").concat(this.$t("portfolio.form.hours"))}}},f=d,v=o(845),h=(0,v.A)(f,s,i,!1,null,"398d904c",null),_=h.exports},24364:function(t,e,o){o.d(e,{$p:function(){return n},Dt:function(){return i},Iw:function(){return v},Ps:function(){return r},Xg:function(){return a},_3:function(){return y},aU:function(){return d},bC:function(){return l},cg:function(){return h},ei:function(){return m},f:function(){return g},iO:function(){return b},qS:function(){return _},qu:function(){return f},sk:function(){return p},w1:function(){return c},yr:function(){return u}});var s=o(75769);function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function r(t){return(0,s.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function a(t,e){return(0,s.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:e})}function n(t){return(0,s.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,s.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function c(){return(0,s.Ay)({url:"/api/portfolio/monitors",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function p(t,e){return(0,s.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:e})}function m(t){return(0,s.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,s.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:e})}function f(){return(0,s.Ay)({url:"/api/portfolio/alerts",method:"get"})}function v(t){return(0,s.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function h(t,e){return(0,s.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:e})}function _(t){return(0,s.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function g(){return(0,s.Ay)({url:"/api/portfolio/groups",method:"get"})}function y(t){return(0,s.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function b(){return(0,s.Ay)({url:"/api/market/types",method:"get"})}},84841:function(t,e,o){o.d(e,{DK:function(){return g},E$:function(){return u},Gl:function(){return d},O0:function(){return c},TK:function(){return a},aU:function(){return i},cw:function(){return l},d$:function(){return b},hG:function(){return n},kg:function(){return r},nY:function(){return _},r7:function(){return p},rx:function(){return v},v9:function(){return f},vF:function(){return m},vi:function(){return y},wq:function(){return h}});var s=o(75769);function i(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function r(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function a(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function n(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function c(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function u(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function d(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function f(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function h(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function _(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function y(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function b(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/620-legacy.c4300c85.js b/frontend/dist/js/620-legacy.c4300c85.js new file mode 100644 index 0000000..d01f096 --- /dev/null +++ b/frontend/dist/js/620-legacy.c4300c85.js @@ -0,0 +1,18 @@ +(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[620],{10867:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});i(52675),i(89463),i(62010),i(9868);var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(44735),s=i(15863),l=i(81127),c=i(56252),u=(i(6011),i(18787)),d=i(76338),h=(i(28706),i(2008),i(50113),i(48980),i(74423),i(48598),i(62062),i(54554),i(79432),i(26099),i(16034),i(38781),i(31415),i(21699),i(47764),i(42762),i(23500),i(62953),i(85471)),p=i(95353),f=i(75769),v=i(35038),g=i(505),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(57532),x=(i(2892),i(27495),i(99449),i(25440),i(11392),i(15237)),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(75314),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[],P=i(21560),L=i(26297),R=i(2403),F=(i(34782),i(26910),i(71761),function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)});function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#141414",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2a2a",gridLineColor:"#252525",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2a2a",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#252525"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"58f93984",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='

'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(83973),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"211c2fea",null),ua=ca.exports},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ +/** @preserve + (c) 2012 by Cédric Mesnil. All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,n.A)(t)+" is not iterable")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/645.22e27101.js b/frontend/dist/js/645.22e27101.js deleted file mode 100644 index 5dd278a..0000000 --- a/frontend/dist/js/645.22e27101.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[645],{8645:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});var s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"settings-page",class:{"theme-dark":e.isDarkTheme}},[e.showRestartTip?t("a-alert",{staticClass:"restart-alert",attrs:{type:"warning",showIcon:"",closable:""},on:{close:function(t){e.showRestartTip=!1}}},[t("template",{slot:"message"},[t("span",[e._v(e._s(e.$t("settings.restartRequired")))]),t("a-button",{attrs:{size:"small",type:"link"},on:{click:e.copyRestartCommand}},[e._v(" "+e._s(e.$t("settings.copyRestartCmd"))+" ")])],1)],2):e._e(),t("div",{staticClass:"settings-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"setting"}}),t("span",[e._v(e._s(e.$t("settings.title")))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("settings.description")))])]),t("a-spin",{attrs:{spinning:e.loading}},[t("div",{staticClass:"settings-content"},[t("a-collapse",{staticClass:"settings-collapse",attrs:{bordered:!1},model:{value:e.activeKeys,callback:function(t){e.activeKeys=t},expression:"activeKeys"}},e._l(e.sortedSchema,function(a,s){return t("a-collapse-panel",{key:s},[t("template",{slot:"header"},[t("span",{staticClass:"panel-header"},[t("a-icon",{staticClass:"panel-icon-left",attrs:{type:a.icon||e.getGroupIcon(s)}}),t("span",{staticClass:"panel-title"},[e._v(e._s(e.getGroupTitle(s,a.title)))])],1)]),"ai"===s?t("div",{staticClass:"openrouter-balance-card"},[t("a-card",{attrs:{size:"small",bordered:!1}},[t("div",{staticClass:"balance-header"},[t("span",{staticClass:"balance-title"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("settings.openrouterBalance")||"OpenRouter 账户余额")+" ")],1),t("a-button",{attrs:{size:"small",type:"primary",ghost:"",loading:e.balanceLoading},on:{click:e.queryOpenRouterBalance}},[t("a-icon",{attrs:{type:"sync"}}),e._v(" "+e._s(e.$t("settings.queryBalance")||"查询余额")+" ")],1)],1),e.openrouterBalance?t("div",{staticClass:"balance-info"},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceUsage")||"已使用",value:e.openrouterBalance.usage,prefix:"$",precision:4,"value-style":{color:"#cf1322"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceRemaining")||"剩余额度",value:null!==e.openrouterBalance.limit_remaining?e.openrouterBalance.limit_remaining:"∞",prefix:null!==e.openrouterBalance.limit_remaining?"$":"",precision:null!==e.openrouterBalance.limit_remaining?4:0,"value-style":{color:null!==e.openrouterBalance.limit_remaining&&e.openrouterBalance.limit_remaining<1?"#cf1322":"#3f8600"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceLimit")||"总限额",value:null!==e.openrouterBalance.limit?e.openrouterBalance.limit:"∞",prefix:null!==e.openrouterBalance.limit?"$":"",precision:null!==e.openrouterBalance.limit?2:0}})],1)],1),e.openrouterBalance.is_free_tier?t("div",{staticClass:"free-tier-badge"},[t("a-tag",{attrs:{color:"blue"}},[e._v("Free Tier")])],1):e._e()],1):t("div",{staticClass:"balance-empty"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"info-circle"}}),e._v(" "+e._s(e.$t("settings.balanceNotQueried")||'点击"查询余额"获取账户信息')+" ")],1)])],1):e._e(),t("a-form",{staticClass:"settings-form",attrs:{form:e.form,layout:"vertical"}},[t("a-row",{attrs:{gutter:24}},e._l(a.items,function(a){return t("a-col",{key:a.key,attrs:{xs:24,sm:24,md:12,lg:12}},[t("a-form-item",[t("template",{slot:"label"},[t("span",{staticClass:"form-label-with-tooltip"},[t("span",{staticClass:"label-text"},[e._v(e._s(e.getItemLabel(s,a)))]),a.description?t("a-tooltip",{attrs:{placement:"top"}},[t("template",{slot:"title"},[e._v(" "+e._s(e.getItemDescription(s,a))+" ")]),t("a-icon",{staticClass:"help-icon",attrs:{type:"question-circle"}})],2):e._e(),a.link?t("a",{staticClass:"api-link",attrs:{href:a.link,target:"_blank",rel:"noopener noreferrer"},on:{click:function(e){e.stopPropagation()}}},[t("a-icon",{attrs:{type:"link"}}),e._v(" "+e._s(e.getLinkText(a.link_text))+" ")],1):e._e()],1)]),"text"===a.type?[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):"",allowClear:""}})]:"password"===a.type?[t("div",{staticClass:"password-field"},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{type:e.passwordVisible[a.key]?"text":"password",placeholder:e.$t("settings.inputApiKey"),allowClear:""}},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{slot:"suffix",type:e.passwordVisible[a.key]?"eye":"eye-invisible"},on:{click:function(t){return e.togglePasswordVisible(a.key)}},slot:"suffix"})],1)],1)]:"number"===a.type?[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getNumberValue(s,a.key,a.default)}],expression:"[item.key, { initialValue: getNumberValue(groupKey, item.key, item.default) }]"}],staticStyle:{width:"100%"},attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):""}})]:"boolean"===a.type?[t("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{valuePropName:"checked",initialValue:e.getBoolValue(s,a.key,a.default)}],expression:"[item.key, { valuePropName: 'checked', initialValue: getBoolValue(groupKey, item.key, item.default) }]"}]})]:"select"===a.type?[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)||a.default}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) || item.default }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):e.$t("settings.pleaseSelect")}},e._l(e.getSelectOptions(a.options),function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[e._v(" "+e._s(a.label)+" ")])}),1)]:e._e(),a.default&&"boolean"!==a.type&&"password"!==a.type?t("div",{staticClass:"field-default"},[e._v(" "+e._s(e.$t("settings.default"))+": "+e._s(a.default)+" ")]):e._e()],2)],1)}),1)],1)],2)}),1)],1)]),t("div",{staticClass:"settings-footer"},[t("a-button",{attrs:{disabled:e.saving},on:{click:e.handleReset}},[t("a-icon",{attrs:{type:"undo"}}),e._v(" "+e._s(e.$t("settings.reset"))+" ")],1),t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSave}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("settings.save"))+" ")],1)],1)],1)},i=[],n=a(57532),r=a(81127),l=a(56252),o=a(44735),c=a(15863),u=a(53003),p=a(55434),d={name:"Settings",mixins:[p.t],data:function(){return{loading:!1,saving:!1,schema:{},values:{},activeKeys:["auth","ai","trading"],passwordVisible:{},showRestartTip:!1,balanceLoading:!1,openrouterBalance:null}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},sortedSchema:function(){var e=Object.entries(this.schema);e.sort(function(e,t){var a=e[1].order||999,s=t[1].order||999;return a-s});for(var t={},a=0,s=e;a0?[a("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(s){return a("div",{key:"a-"+s.symbol,staticClass:"index-item"},[a("span",{staticClass:"idx-flag"},[t._v(t._s(s.flag))]),a("span",{staticClass:"idx-symbol"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(s.price)))]),a("span",{staticClass:"idx-change",class:s.change>=0?"up":"down"},[a("a-icon",{attrs:{type:s.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(s.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(s){return a("div",{key:"b-"+s.symbol,staticClass:"index-item"},[a("span",{staticClass:"idx-flag"},[t._v(t._s(s.flag))]),a("span",{staticClass:"idx-symbol"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(s.price)))]),a("span",{staticClass:"idx-change",class:s.change>=0?"up":"down"},[a("a-icon",{attrs:{type:s.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(s.change).toFixed(2))+"% ")],1)])})],2)]:[a("div",{staticClass:"indices-empty"},[t._v("--")])]],2),a("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[a("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),a("div",{staticClass:"main-body"},[a("div",{staticClass:"left-panel"},[a("div",{staticClass:"heatmap-box"},[a("div",{staticClass:"box-header"},[a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(a){t.heatmapType=a},expression:"heatmapType"}},[a("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),a("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),a("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),a("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),a("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return a("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(s,e){return a("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(s.value)},[a("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(s)))]),s.price?a("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(s.price)))]):t._e(),a("span",{staticClass:"heat-val"},[t._v(t._s(s.value>=0?"+":"")+t._s(t.formatNum(s.value))+"%")])])}):[a("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),a("div",{staticClass:"calendar-box"},[a("div",{staticClass:"box-header"},[a("span",{staticClass:"box-title"},[a("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),a("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return a("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(s){return a("div",{key:s.id,staticClass:"cal-item",class:s.importance},[a("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(s.date)))]),a("span",{staticClass:"cal-time"},[t._v(t._s(s.time||"--:--"))]),a("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(s.country)))]),a("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?s.name:s.name_en))]),a("span",{staticClass:"cal-impact",class:t.getImpactClass(s)},["bullish"===t.getImpactClass(s)?a("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(s)?a("a-icon",{attrs:{type:"arrow-down"}}):a("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(s.actual||s.forecast||"--")+" ")],1)])}):[a("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),a("div",{staticClass:"right-panel"},[a("div",{staticClass:"analysis-toolbar"},[a("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(a){t.selectedSymbol=a},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(s){return a("a-select-option",{key:"".concat(s.market,"-").concat(s.symbol),attrs:{value:"".concat(s.market,":").concat(s.symbol)}},[a("span",{staticClass:"symbol-option"},[a("a-tag",{attrs:{color:t.getMarketColor(s.market),size:"small"}},[t._v(t._s(t.getMarketName(s.market)))]),a("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(s.symbol))]),s.name?a("span",{staticClass:"symbol-name"},[t._v(t._s(s.name))]):t._e()],1)])}),a("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[a("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),a("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),a("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(a){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),a("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():a("div",{staticClass:"analysis-placeholder"},[a("div",{staticClass:"placeholder-hero"},[t._m(3),a("div",{staticClass:"hero-body"},[a("div",{staticClass:"hero-badge"},[t._v("AI-POWERED")]),a("h2",{staticClass:"hero-title"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.title")))]),a("p",{staticClass:"hero-subtitle"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.subtitle")))]),a("div",{staticClass:"hero-stats"},[a("div",{staticClass:"hstat"},[a("div",{staticClass:"hstat-icon"},[a("a-icon",{attrs:{type:"line-chart"}})],1),a("div",{staticClass:"hstat-body"},[a("span",{staticClass:"hstat-val"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature1")))]),a("span",{staticClass:"hstat-label"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature1Desc")))])])]),a("div",{staticClass:"hstat"},[a("div",{staticClass:"hstat-icon"},[a("a-icon",{attrs:{type:"dashboard"}})],1),a("div",{staticClass:"hstat-body"},[a("span",{staticClass:"hstat-val"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature2")))]),a("span",{staticClass:"hstat-label"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature2Desc")))])])]),a("div",{staticClass:"hstat"},[a("div",{staticClass:"hstat-icon"},[a("a-icon",{attrs:{type:"apartment"}})],1),a("div",{staticClass:"hstat-body"},[a("span",{staticClass:"hstat-val"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature3")))]),a("span",{staticClass:"hstat-label"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature3Desc")))])])])]),a("div",{staticClass:"hero-cta"},[a("a-button",{attrs:{type:"primary",size:"large",icon:"plus"},on:{click:function(a){t.showAddStockModal=!0}}},[t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")]),a("a-button",{attrs:{size:"large",icon:"thunderbolt",disabled:!t.selectedSymbol},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")])],1),a("p",{staticClass:"hero-hint"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.quickStart")))])])])]),t.analysisResult||t.analyzing||t.analysisError?a("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),a("div",{staticClass:"watchlist-panel"},[a("div",{staticClass:"panel-header"},[a("span",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),a("span",{staticClass:"panel-header-actions"},[a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.tasks.manage")}},[a("a-badge",{attrs:{count:t.monitors.length,offset:[-2,2],"number-style":{fontSize:"9px",minWidth:"14px",height:"14px",lineHeight:"14px",padding:"0 3px"}}},[a("a-icon",{staticClass:"panel-header-icon",attrs:{type:"unordered-list"},on:{click:function(a){t.showTaskDrawer=!0}}})],1)],1),a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.batch.schedule")}},[a("a-icon",{staticClass:"panel-header-icon",attrs:{type:"schedule"},on:{click:t.toggleBatchMode}})],1),a("a-icon",{staticClass:"panel-header-icon",attrs:{type:"plus"},on:{click:function(a){t.showAddStockModal=!0}}})],1)]),t.watchlist&&t.watchlist.length>0?a("div",{staticClass:"panel-summary"},[a("div",{staticClass:"summary-chip"},[a("span",{staticClass:"sc-num"},[t._v(t._s(t.watchlist.length))]),a("span",{staticClass:"sc-label"},[t._v(t._s(t.$t("aiAssetAnalysis.watchlist.totalAssets")))])]),t.watchlistPositionCount>0?a("div",{staticClass:"summary-chip"},[a("span",{staticClass:"sc-num"},[t._v(t._s(t.watchlistPositionCount))]),a("span",{staticClass:"sc-label"},[t._v(t._s(t.$t("aiAssetAnalysis.watchlist.positionCount")))])]):t._e(),t.watchlistTaskCount>0?a("div",{staticClass:"summary-chip"},[a("span",{staticClass:"sc-num"},[t._v(t._s(t.watchlistTaskCount))]),a("span",{staticClass:"sc-label"},[t._v(t._s(t.$t("aiAssetAnalysis.watchlist.taskCount")))])]):t._e(),0!==t.watchlistTotalPnl?a("div",{staticClass:"summary-chip pnl"},[a("span",{staticClass:"sc-num",class:t.watchlistTotalPnl>=0?"up":"down"},[t._v(t._s(t.watchlistTotalPnl>=0?"+":"")+t._s(t.formatNum(t.watchlistTotalPnl)))]),a("span",{staticClass:"sc-label"},[t._v("P&L")])]):t._e()]):t._e(),t.batchMode?a("div",{staticClass:"batch-bar"},[a("a-checkbox",{staticClass:"batch-all-cb",attrs:{checked:t.batchSelectedAll,indeterminate:t.batchIndeterminate},on:{change:t.onBatchSelectAll}},[t._v(" "+t._s(t.$t("aiAssetAnalysis.batch.selectAll"))+" ")]),a("a-button",{attrs:{type:"primary",size:"small",icon:"clock-circle",disabled:0===t.batchSelectedKeys.length},on:{click:t.openBatchScheduleModal}},[t._v(" "+t._s(t.$t("aiAssetAnalysis.batch.schedule"))+" "),t.batchSelectedKeys.length>0?a("span",[t._v("("+t._s(t.batchSelectedKeys.length)+")")]):t._e()]),a("a-button",{attrs:{size:"small"},on:{click:t.toggleBatchMode}},[t._v(t._s(t.$t("common.cancel")))])],1):t._e(),a("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(s){var e,i,n;return a("div",{key:"wl-".concat(s.market,"-").concat(s.symbol),staticClass:"wl-card",class:{active:t.selectedSymbol==="".concat(s.market,":").concat(s.symbol)},on:{click:function(a){return t.selectWatchlistItem(s)}}},[t.batchMode?a("a-checkbox",{staticClass:"wl-card-cb",attrs:{checked:t.batchSelectedKeys.includes("".concat(s.market,":").concat(s.symbol))},on:{change:function(a){return t.onBatchItemToggle(s,a)}},nativeOn:{click:function(t){t.stopPropagation()}}}):t._e(),a("div",{staticClass:"wl-card-body",class:{"with-cb":t.batchMode}},[a("div",{staticClass:"wl-row-main"},[a("span",{staticClass:"wl-symbol"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"wl-market"},[t._v(t._s(t.getMarketName(s.market)))]),a("span",{staticClass:"wl-spacer"}),t.watchlistPrices["".concat(s.market,":").concat(s.symbol)]?[a("span",{staticClass:"wl-price"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(s.market,":").concat(s.symbol)].price)))]),a("span",{staticClass:"wl-change",class:((null===(e=t.watchlistPrices["".concat(s.market,":").concat(s.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(s.market,":").concat(s.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(n=t.watchlistPrices["".concat(s.market,":").concat(s.symbol)])||void 0===n?void 0:n.change))+"% ")])]:t._e()],2),t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)]?a("div",{staticClass:"wl-row-pnl"},[a("span",{staticClass:"wl-pnl-qty"},[t._v(t._s(t.formatNum(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].quantity,4))+" @ "+t._s(t.formatPrice(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].avgEntry||0)))]),a("span",{staticClass:"wl-pnl-val",class:t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnl>=0?"up":"down"},[t._v(" "+t._s(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnl>=0?"+":"")+t._s(t.formatNum(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnl||0))+" ("+t._s(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnlPercent>=0?"+":"")+t._s(t.formatNum(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnlPercent||0))+"%) ")])]):t._e(),t.getMonitorMeta(s)?a("div",{staticClass:"wl-row-task"},[a("span",{staticClass:"wl-task-badge",class:t.getMonitorMeta(s).activeCount>0?"active":"paused",on:{click:function(a){return a.stopPropagation(),t.toggleStockMonitor(s)}}},[a("a-icon",{attrs:{type:t.getMonitorMeta(s).activeCount>0?"sync":"pause-circle",spin:t.getMonitorMeta(s).activeCount>0}}),t._v(" "+t._s(t.getMonitorMeta(s).activeCount>0?t.$t("aiAssetAnalysis.monitor.running"):t.$t("aiAssetAnalysis.monitor.paused"))+" ")],1),t.getMonitorMeta(s).nextRunAtText?a("span",{staticClass:"wl-task-next"},[t._v(t._s(t.getMonitorMeta(s).nextRunAtText))]):t._e()]):t._e()]),a("div",{staticClass:"wl-card-hover-actions"},[a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.position.quickAdd")}},[a("span",{staticClass:"wl-hover-btn",on:{click:function(a){return a.stopPropagation(),t.openPositionModal(s)}}},[a("a-icon",{attrs:{type:"wallet"}})],1)]),a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.monitor.quickTask")}},[a("span",{staticClass:"wl-hover-btn",on:{click:function(a){return a.stopPropagation(),t.openMonitorModal(s)}}},[a("a-icon",{attrs:{type:"clock-circle"}})],1)]),a("span",{staticClass:"wl-hover-btn danger",on:{click:function(a){return a.stopPropagation(),t.removeFromWatchlist(s)}}},[a("a-icon",{attrs:{type:"delete"}})],1)],1)],1)}),t.watchlist&&0!==t.watchlist.length?t._e():a("div",{staticClass:"watchlist-empty"},[a("div",{staticClass:"we-icon"},[a("a-icon",{attrs:{type:"star"}})],1),a("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),a("a-button",{attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(a){t.showAddStockModal=!0}}},[t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")])],1)],2)])])]),a("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",wrapClassName:t.isDarkTheme?"qd-dark-modal":"",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[a("div",{staticClass:"add-stock-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(a){t.selectedMarketTab=a},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(s){return a("a-tab-pane",{key:s.value,attrs:{tab:t.$t(s.i18nKey||"dashboard.analysis.market.".concat(s.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(a){t.symbolSearchKeyword=a},expression:"symbolSearchKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(s){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return t.selectSymbol(s)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"symbol-name"},[t._v(t._s(s.name))]),s.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(s.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(s){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return t.selectSymbol(s)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"symbol-name"},[t._v(t._s(s.name))]),s.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(s.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):a("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?a("div",{staticClass:"selected-symbol-section"},[a("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(a){t.selectedSymbolForAdd=null}}},[a("template",{slot:"description"},[a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),a("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?a("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),a("a-modal",{attrs:{visible:t.showPositionModal,title:"".concat(t.$i18n&&"zh-CN"===t.$i18n.locale?"创建持仓(虚拟仓)":"Create Position (Virtual)"," - ").concat(t.targetStockForOps?t.targetStockForOps.symbol:""),wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.savePosition,cancel:function(a){t.showPositionModal=!1}}},[a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("portfolio.positions.side")||"Direction"}},[a("a-select",{model:{value:t.positionForm.side,callback:function(a){t.$set(t.positionForm,"side",a)},expression:"positionForm.side"}},[a("a-select-option",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")||"Long"))]),a("a-select-option",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")||"Short"))])],1)],1),a("a-form-item",{attrs:{label:t.$i18n&&"zh-CN"===t.$i18n.locale?"数量":"Quantity"}},[a("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:.01},model:{value:t.positionForm.quantity,callback:function(a){t.$set(t.positionForm,"quantity",a)},expression:"positionForm.quantity"}})],1),a("a-form-item",{attrs:{label:t.$i18n&&"zh-CN"===t.$i18n.locale?"买入单价":"Entry Price"}},[a("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:.01},model:{value:t.positionForm.entryPrice,callback:function(a){t.$set(t.positionForm,"entryPrice",a)},expression:"positionForm.entryPrice"}})],1)],1)],1),a("a-modal",{attrs:{visible:t.showMonitorModal,title:"".concat(t.$t("aiAssetAnalysis.monitor.quickTask")," - ").concat(t.targetStockForOps?t.targetStockForOps.symbol:""),wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.saveMonitorTask,cancel:function(a){t.showMonitorModal=!1}}},[a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.intervalLabel")}},[a("a-select",{staticStyle:{width:"100%"},model:{value:t.monitorForm.interval_min,callback:function(a){t.$set(t.monitorForm,"interval_min",a)},expression:"monitorForm.interval_min"}},[a("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval1h")))]),a("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval4h")))]),a("a-select-option",{attrs:{value:720}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval12h")))]),a("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval24h")))])],1)],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.notifyLabel")}},[a("a-checkbox-group",{staticStyle:{width:"100%"},model:{value:t.monitorForm.notify_channels,callback:function(a){t.$set(t.monitorForm,"notify_channels",a)},expression:"monitorForm.notify_channels"}},[a("a-row",{attrs:{gutter:8}},[a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"email"}},[a("a-icon",{attrs:{type:"mail"}}),t._v(" Email")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"telegram"}},[a("a-icon",{attrs:{type:"send"}}),t._v(" Telegram")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"webhook"}},[a("a-icon",{attrs:{type:"api"}}),t._v(" Webhook")],1)],1)],1)],1)],1),a("a-alert",{attrs:{message:t.$t("aiAssetAnalysis.monitor.tip"),type:"info","show-icon":""}})],1)],1),a("a-modal",{attrs:{visible:t.showBatchScheduleModal,title:t.$t("aiAssetAnalysis.batch.scheduleTitle"),confirmLoading:t.batchRunning,width:"520px",wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.saveBatchSchedule,cancel:function(a){t.showBatchScheduleModal=!1}}},[a("div",{staticClass:"batch-modal-summary"},[a("p",[t._v(t._s(t.$t("aiAssetAnalysis.batch.scheduleDesc",{count:t.batchSelectedKeys.length})))]),a("div",{staticClass:"batch-symbols-preview"},t._l(t.batchSelectedKeys,function(s){return a("a-tag",{key:s,staticStyle:{"margin-bottom":"4px"},attrs:{color:"blue"}},[t._v(t._s(s.split(":")[1]))])}),1)]),a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.intervalLabel")}},[a("a-select",{staticStyle:{width:"100%"},model:{value:t.batchScheduleForm.interval_min,callback:function(a){t.$set(t.batchScheduleForm,"interval_min",a)},expression:"batchScheduleForm.interval_min"}},[a("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval1h")))]),a("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval4h")))]),a("a-select-option",{attrs:{value:720}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval12h")))]),a("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval24h")))])],1)],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.notifyLabel")}},[a("a-checkbox-group",{staticStyle:{width:"100%"},model:{value:t.batchScheduleForm.notify_channels,callback:function(a){t.$set(t.batchScheduleForm,"notify_channels",a)},expression:"batchScheduleForm.notify_channels"}},[a("a-row",{attrs:{gutter:8}},[a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"email"}},[a("a-icon",{attrs:{type:"mail"}}),t._v(" Email")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"telegram"}},[a("a-icon",{attrs:{type:"send"}}),t._v(" Telegram")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"webhook"}},[a("a-icon",{attrs:{type:"api"}}),t._v(" Webhook")],1)],1)],1)],1)],1)],1),a("a-alert",{staticStyle:{"margin-top":"8px"},attrs:{message:t.$t("aiAssetAnalysis.batch.scheduleTip"),type:"info","show-icon":""}})],1),a("a-drawer",{attrs:{title:t.$t("aiAssetAnalysis.tasks.manage"),visible:t.showTaskDrawer,width:"420",placement:"right",wrapClassName:t.isDarkTheme?"qd-dark-drawer":""},on:{close:function(a){t.showTaskDrawer=!1}}},[0===t.monitors.length?a("div",{staticClass:"task-drawer-empty"},[a("a-icon",{staticStyle:{"font-size":"40px",color:"#ccc"},attrs:{type:"inbox"}}),a("p",[t._v(t._s(t.$t("aiAssetAnalysis.tasks.empty")))])],1):a("div",{staticClass:"task-drawer-list"},t._l(t.monitors,function(s){return a("div",{key:s.id,staticClass:"task-item"},[a("div",{staticClass:"task-item-header"},[a("span",{staticClass:"task-item-name"},[t._v(t._s(s.name||"AI Task"))]),a("a-tag",{attrs:{color:s.is_active?"green":"default",size:"small"}},[t._v(" "+t._s(s.is_active?t.$t("aiAssetAnalysis.monitor.running"):t.$t("aiAssetAnalysis.monitor.paused"))+" ")])],1),a("div",{staticClass:"task-item-meta"},[s.config&&s.config.run_interval_minutes?a("span",[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.formatIntervalText(s.config.run_interval_minutes))+" ")],1):t._e(),s.next_run_at?a("span",[a("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t._formatNextRunText(s.next_run_at))+" ")],1):t._e()]),a("div",{staticClass:"task-item-actions"},[a("a-button",{attrs:{size:"small",type:s.is_active?"default":"primary",icon:"poweroff"},on:{click:function(a){return t.handleToggleTask(s)}}},[t._v(" "+t._s(s.is_active?t.$t("aiAssetAnalysis.tasks.pause"):t.$t("aiAssetAnalysis.tasks.resume"))+" ")]),a("a-button",{attrs:{size:"small",icon:"edit"},on:{click:function(a){return t.handleEditTask(s)}}},[t._v(t._s(t.$t("aiAssetAnalysis.tasks.edit")))]),a("a-popconfirm",{attrs:{title:t.$t("aiAssetAnalysis.tasks.deleteConfirm"),okText:t.$t("common.confirm"),cancelText:t.$t("common.cancel")},on:{confirm:function(a){return t.handleDeleteTask(s)}}},[a("a-button",{attrs:{size:"small",type:"danger",icon:"delete"}},[t._v(t._s(t.$t("aiAssetAnalysis.tasks.delete")))])],1)],1)])}),0)]),a("a-modal",{attrs:{visible:t.showEditTaskModal,title:t.$t("aiAssetAnalysis.tasks.edit"),confirmLoading:t.editTaskLoading,wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.saveEditTask,cancel:function(a){t.showEditTaskModal=!1}}},[t.editTaskForm?a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.tasks.name")}},[a("a-input",{model:{value:t.editTaskForm.name,callback:function(a){t.$set(t.editTaskForm,"name",a)},expression:"editTaskForm.name"}})],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.intervalLabel")}},[a("a-select",{staticStyle:{width:"100%"},model:{value:t.editTaskForm.interval_min,callback:function(a){t.$set(t.editTaskForm,"interval_min",a)},expression:"editTaskForm.interval_min"}},[a("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval1h")))]),a("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval4h")))]),a("a-select-option",{attrs:{value:720}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval12h")))]),a("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval24h")))])],1)],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.notifyLabel")}},[a("a-checkbox-group",{staticStyle:{width:"100%"},model:{value:t.editTaskForm.notify_channels,callback:function(a){t.$set(t.editTaskForm,"notify_channels",a)},expression:"editTaskForm.notify_channels"}},[a("a-row",{attrs:{gutter:8}},[a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"email"}},[a("a-icon",{attrs:{type:"mail"}}),t._v(" Email")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"telegram"}},[a("a-icon",{attrs:{type:"send"}}),t._v(" Telegram")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"webhook"}},[a("a-icon",{attrs:{type:"api"}}),t._v(" Webhook")],1)],1)],1)],1)],1)],1):t._e()],1),a("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"},wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{cancel:function(a){t.showHistoryModal=!1}}},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(a){t.historyPage=a,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(a,s){t.historyPageSize=s,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(s){return a("a-list-item",{},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[a("div",[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(s.market)}},[t._v(" "+t._s(t.getMarketName(s.market))+" ")]),a("strong",[t._v(t._s(s.symbol))]),a("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===s.decision?"green":"SELL"===s.decision?"red":"blue"}},[t._v(" "+t._s(s.decision)+" ")]),a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{color:t.getStatusColor(s.status||"completed")}},[t._v(" "+t._s(t.getStatusText(s.status||"completed"))+" ")]),a("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(s.confidence)+"% ")])],1),a("div",[a("a-button",{attrs:{type:"link",size:"small",icon:"eye",disabled:"processing"===(s.status||"").toLowerCase()},on:{click:function(a){return t.viewHistoryResult(s)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),a("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(a){return t.deleteHistoryItem(s)}}},[a("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),a("template",{slot:"description"},[a("div",{staticStyle:{color:"#666","font-size":"12px"}},[s.price?a("span",[t._v("$"+t._s(t.formatNumber(s.price)))]):t._e(),s.summary?a("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(s.summary.substring(0,80))+t._s(s.summary.length>80?"...":""))]):t._e()]),s.created_at?a("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(s.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():a("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,a=t._self._c;return a("div",{staticClass:"indicator-box skeleton-box"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])},function(){var t=this,a=t._self._c;return a("div",{staticClass:"indicator-box skeleton-box"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])},function(){var t=this,a=t._self._c;return a("div",{staticClass:"indicator-box skeleton-box"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])},function(){var t=this,a=t._self._c;return a("div",{staticClass:"hero-bg"},[a("div",{staticClass:"hero-bg-circle c1"}),a("div",{staticClass:"hero-bg-circle c2"}),a("div",{staticClass:"hero-bg-grid"})])}],n=s(44735),r=s(21560),o=s(57532),l=s(2403),c=s(15863),d=s(81127),u=s(56252),m=s(76338),h=s(95353),p=s(505),v=s(35038),y=s(24364),f=s(75769),b="/api/fast-analysis";function g(t){return(0,f.Ay)({url:"".concat(b,"/analyze"),method:"post",data:t,timeout:3e5})}function _(t){return(0,f.Ay)({url:"".concat(b,"/history/all"),method:"get",params:t})}function k(t){return(0,f.Ay)({url:"".concat(b,"/history/").concat(t),method:"delete"})}function C(t){return(0,f.Ay)({url:"".concat(b,"/feedback"),method:"post",data:t})}var A=s(44146),S=function(){var t,a,s,e,i,n,r,o,l,c,d,u,m,h,p,v,y,f,b,g,_,k,C=this,A=C._self._c;return A("div",{staticClass:"fast-analysis-report",class:{"theme-dark":C.isDarkTheme}},[C.loading?A("div",{staticClass:"loading-container"},[A("div",{staticClass:"loading-content-pro"},[A("div",{staticClass:"loading-header"},[A("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),A("span",{staticClass:"loading-title"},[C._v(C._s(C.$t("fastAnalysis.analyzing")))])],1),A("div",{staticClass:"progress-wrapper"},[A("a-progress",{attrs:{percent:C.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),A("span",{staticClass:"progress-text"},[C._v(C._s(C.formatProgress(C.progressPercent))+"%")])],1),A("div",{staticClass:"current-step"},[A("a-icon",{attrs:{type:"loading",spin:""}}),A("span",[C._v(C._s(C.currentStepText))])],1),A("div",{staticClass:"steps-list"},[A("div",{staticClass:"step-item",class:{done:C.step>1,active:1===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step1")||"获取实时数据"))]),C.step>1?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1),A("div",{staticClass:"step-item",class:{done:C.step>2,active:2===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step2")||"计算技术指标"))]),C.step>2?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1),A("div",{staticClass:"step-item",class:{done:C.step>3,active:3===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step3")||"AI深度分析"))]),C.step>3?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1),A("div",{staticClass:"step-item",class:{done:C.step>4,active:4===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step4")||"生成报告"))]),C.step>4?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1)]),A("div",{staticClass:"loading-footer"},[A("span",{staticClass:"elapsed-time"},[C._v(C._s(C.elapsedTimeText))])])])]):C.error?A("div",{staticClass:"error-container"},[A("a-result",{attrs:{status:"warning"===C.errorTone?"warning":"error",title:C.errorTitle,"sub-title":C.error},scopedSlots:C._u([{key:"extra",fn:function(){return[A("a-button",{attrs:{type:"primary"},on:{click:function(t){return C.$emit("retry")}}},[C._v(" "+C._s(C.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):C.result?A("div",{staticClass:"result-container"},[A("div",{staticClass:"decision-card",class:C.decisionClass},[A("div",{staticClass:"decision-main"},[A("div",{staticClass:"decision-badge"},[A("a-icon",{attrs:{type:C.decisionIcon}}),A("span",{staticClass:"decision-text"},[C._v(C._s(C.result.decision))])],1),A("div",{staticClass:"confidence-ring"},[A("a-progress",{attrs:{type:"circle",percent:C.result.confidence,width:80,strokeColor:C.confidenceColor},scopedSlots:C._u([{key:"format",fn:function(t){return[A("span",{staticClass:"confidence-value"},[C._v(C._s(t)+"%")])]}}])}),A("div",{staticClass:"confidence-label"},[C._v(C._s(C.$t("fastAnalysis.confidence")))])],1)]),A("div",{staticClass:"decision-summary"},[C._v(" "+C._s(C.result.summary)+" ")]),C.consensusBlock?A("div",{staticClass:"consensus-strip"},[A("div",{staticClass:"consensus-strip-title"},[A("a-icon",{attrs:{type:"cluster"}}),C._v(" "+C._s(C.$t("fastAnalysis.consensusTitle"))+" ")],1),A("div",{staticClass:"consensus-strip-metrics"},[A("span",{staticClass:"cm-item"},[A("em",[C._v(C._s(C.$t("fastAnalysis.consensusDecision")))]),C._v(" "+C._s(C.consensusBlock.consensus_decision)+" ")]),A("span",{staticClass:"cm-item"},[A("em",[C._v(C._s(C.$t("fastAnalysis.consensusScore")))]),C._v(" "+C._s(C.formatConsensusNum(C.consensusBlock.consensus_score))+" ")]),null!=C.consensusBlock.agreement_ratio?A("span",{staticClass:"cm-item"},[A("em",[C._v(C._s(C.$t("fastAnalysis.consensusAgreement")))]),C._v(" "+C._s(C.formatAgreementPct(C.consensusBlock.agreement_ratio))+" ")]):C._e()])]):C._e()]),A("div",{staticClass:"price-info-row"},[A("div",{staticClass:"price-card current"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.currentPrice")))]),A("div",{staticClass:"price-value"},[C._v("$"+C._s(C.formatPrice(null===(t=C.result.market_data)||void 0===t?void 0:t.current_price)))]),A("div",{staticClass:"price-change",class:(null===(a=C.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"positive":"negative"},[C._v(" "+C._s((null===(s=C.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"+":"")+C._s(C.formatNumber(null===(e=C.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),A("div",{staticClass:"price-card entry"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.entryPrice")))]),A("div",{staticClass:"price-value"},[C._v("$"+C._s(C.formatPrice(C.tradingPlan.entry_price)))])]),A("div",{staticClass:"price-card stop"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.stopLoss")))]),A("div",{staticClass:"price-value negative"},[C._v("$"+C._s(C.formatPrice(C.tradingPlan.stop_loss)))]),A("div",{staticClass:"price-hint"},[A("a-tooltip",{attrs:{title:C.stopLossHintText}},[A("a-icon",{attrs:{type:"info-circle"}}),C._v(" "+C._s(C.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),A("div",{staticClass:"price-card target"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.takeProfit")))]),A("div",{staticClass:"price-value positive"},[C._v("$"+C._s(C.formatPrice(C.tradingPlan.take_profit)))]),A("div",{staticClass:"price-hint"},[A("a-tooltip",{attrs:{title:C.takeProfitHintText}},[A("a-icon",{attrs:{type:"info-circle"}}),C._v(" "+C._s(C.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),C.trendOutlookBlocks.length||C.trendOutlookSummaryText?A("div",{staticClass:"trend-outlook-card"},[A("div",{staticClass:"trend-outlook-header"},[A("a-icon",{attrs:{type:"calendar"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.trendOutlookTitle")))])],1),C.trendOutlookSummaryText?A("div",{staticClass:"trend-outlook-summary"},[C._v(" "+C._s(C.trendOutlookSummaryText)+" ")]):C._e(),C.trendOutlookBlocks.length?A("div",{staticClass:"trend-outlook-grid"},C._l(C.trendOutlookBlocks,function(t){return A("div",{key:t.key,staticClass:"trend-outlook-item"},[A("div",{staticClass:"to-label"},[C._v(C._s(t.label))]),A("div",{staticClass:"to-trend",class:C.outlookTrendClass(t.trend)},[C._v(" "+C._s(C.formatOutlookTrend(t.trend))+" ")]),A("div",{staticClass:"to-meta"},[A("span",{staticClass:"to-score"},[C._v(C._s(null!=t.score?t.score:"--"))]),A("span",{staticClass:"to-str"},[C._v(C._s(t.strength||"--"))])])])}),0):C._e()]):C._e(),A("div",{staticClass:"scores-row"},[A("div",{staticClass:"score-item"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"line-chart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.technical")))])],1),A("a-progress",{attrs:{percent:(null===(i=C.result.scores)||void 0===i?void 0:i.technical)||50,strokeColor:C.getScoreColor(null===(n=C.result.scores)||void 0===n?void 0:n.technical),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(r=C.result.scores)||void 0===r?void 0:r.technical)||50))])],1),A("div",{staticClass:"score-item"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"bank"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.fundamental")))])],1),A("a-progress",{attrs:{percent:(null===(o=C.result.scores)||void 0===o?void 0:o.fundamental)||50,strokeColor:C.getScoreColor(null===(l=C.result.scores)||void 0===l?void 0:l.fundamental),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(c=C.result.scores)||void 0===c?void 0:c.fundamental)||50))])],1),A("div",{staticClass:"score-item"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"heart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.sentiment")))])],1),A("a-progress",{attrs:{percent:(null===(d=C.result.scores)||void 0===d?void 0:d.sentiment)||50,strokeColor:C.getScoreColor(null===(u=C.result.scores)||void 0===u?void 0:u.sentiment),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(m=C.result.scores)||void 0===m?void 0:m.sentiment)||50))])],1),A("div",{staticClass:"score-item overall"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"dashboard"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.overall")))])],1),A("a-progress",{attrs:{percent:(null===(h=C.result.scores)||void 0===h?void 0:h.overall)||50,strokeColor:C.getScoreColor(null===(p=C.result.scores)||void 0===p?void 0:p.overall),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(v=C.result.scores)||void 0===v?void 0:v.overall)||50))])],1)]),C.result.detailed_analysis?A("div",{staticClass:"detailed-analysis"},[C.result.detailed_analysis.technical?A("div",{staticClass:"analysis-card technical"},[A("div",{staticClass:"analysis-card-header"},[A("a-icon",{attrs:{type:"line-chart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.technicalAnalysis")))]),A("a-tag",{attrs:{color:C.getScoreTagColor(null===(y=C.result.scores)||void 0===y?void 0:y.technical)}},[C._v(" "+C._s((null===(f=C.result.scores)||void 0===f?void 0:f.technical)||50)+"分 ")])],1),A("div",{staticClass:"analysis-card-content"},[C._v(" "+C._s(C.result.detailed_analysis.technical)+" ")])]):C._e(),C.result.detailed_analysis.fundamental?A("div",{staticClass:"analysis-card fundamental"},[A("div",{staticClass:"analysis-card-header"},[A("a-icon",{attrs:{type:"bank"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.fundamentalAnalysis")))]),A("a-tag",{attrs:{color:C.getScoreTagColor(null===(b=C.result.scores)||void 0===b?void 0:b.fundamental)}},[C._v(" "+C._s((null===(g=C.result.scores)||void 0===g?void 0:g.fundamental)||50)+"分 ")])],1),A("div",{staticClass:"analysis-card-content"},[C._v(" "+C._s(C.result.detailed_analysis.fundamental)+" ")])]):C._e(),C.result.detailed_analysis.sentiment?A("div",{staticClass:"analysis-card sentiment"},[A("div",{staticClass:"analysis-card-header"},[A("a-icon",{attrs:{type:"heart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.sentimentAnalysis")))]),A("a-tag",{attrs:{color:C.getScoreTagColor(null===(_=C.result.scores)||void 0===_?void 0:_.sentiment)}},[C._v(" "+C._s((null===(k=C.result.scores)||void 0===k?void 0:k.sentiment)||50)+"分 ")])],1),A("div",{staticClass:"analysis-card-content"},[C._v(" "+C._s(C.result.detailed_analysis.sentiment)+" ")])]):C._e()]):C._e(),A("div",{staticClass:"analysis-details"},[A("div",{staticClass:"detail-section reasons"},[A("div",{staticClass:"section-title"},[A("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.keyReasons")))])],1),A("ul",{staticClass:"detail-list"},C._l(C.result.reasons,function(t,a){return A("li",{key:"r-"+a},[C._v(" "+C._s(t)+" ")])}),0)]),A("div",{staticClass:"detail-section risks"},[A("div",{staticClass:"section-title"},[A("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.risks")))])],1),A("ul",{staticClass:"detail-list"},C._l(C.result.risks,function(t,a){return A("li",{key:"k-"+a},[C._v(" "+C._s(t)+" ")])}),0)])]),C.result.indicators&&Object.keys(C.result.indicators).length>0?A("div",{staticClass:"indicators-section"},[A("div",{staticClass:"section-title"},[A("a-icon",{attrs:{type:"stock"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.indicators")))]),A("a-tag",{staticClass:"indicators-pro-badge",attrs:{color:"blue"}},[C._v(C._s(C.$t("fastAnalysis.indicatorsProBadge")))])],1),A("div",{staticClass:"indicators-methodology"},[A("a-icon",{attrs:{type:"experiment"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.indicatorsProSubtitle")))])],1),A("div",{staticClass:"indicators-grid"},[C.result.indicators.rsi?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v("RSI (14)")]),A("div",{staticClass:"indicator-value",class:C.getRsiClass(C.result.indicators.rsi.value)},[C._v(" "+C._s(C.formatNumber(C.result.indicators.rsi.value,1))+" ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.translateSignal(C.result.indicators.rsi.signal)))])]):C._e(),C.result.indicators.macd?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v("MACD (12,26,9)")]),A("div",{staticClass:"indicator-value",class:"bullish"===C.result.indicators.macd.signal?"bullish":"bearish"===C.result.indicators.macd.signal?"bearish":""},[C._v(" "+C._s(C.translateTrend(C.result.indicators.macd.trend))+" ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.translateSignal(C.result.indicators.macd.signal)))])]):C._e(),C.result.indicators.moving_averages?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.maTrend")))]),A("div",{staticClass:"indicator-value",class:C.getMaTrendClass(C.result.indicators.moving_averages.trend)},[C._v(" "+C._s(C.translateTrend(C.result.indicators.moving_averages.trend))+" ")])]):C._e(),C.result.indicators.volatility&&null!=C.result.indicators.volatility.atr?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v("ATR (14)")]),A("div",{staticClass:"indicator-value",class:C.getVolatilityClass(C.result.indicators.volatility.level)},[C._v(" $"+C._s(C.formatPrice(C.result.indicators.volatility.atr))+" ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.atrTrueRange")))])]):C._e(),C.result.indicators.bollinger&&null!=C.result.indicators.bollinger.BB_width?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.bbWidth")))]),A("div",{staticClass:"indicator-value"},[C._v(C._s(C.formatNumber(C.result.indicators.bollinger.BB_width,2))+"%")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.bbWidthHint")))])]):C._e(),null!=C.result.indicators.price_position?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.rangePct20")))]),A("div",{staticClass:"indicator-value"},[C._v(C._s(C.formatNumber(C.result.indicators.price_position,1))+"%")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.rangePct20Hint")))])]):C._e(),null!=C.result.indicators.volume_ratio?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.volumeRatio")))]),A("div",{staticClass:"indicator-value",class:C.volumeRatioClass(C.result.indicators.volume_ratio)},[C._v(" "+C._s(C.formatNumber(C.result.indicators.volume_ratio,2))+"× ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.volumeRatioHint")))])]):C._e(),C.result.indicators.levels?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.support")))]),A("div",{staticClass:"indicator-value"},[C._v("$"+C._s(C.formatPrice(C.result.indicators.levels.support)))])]):C._e(),C.result.indicators.levels?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.resistance")))]),A("div",{staticClass:"indicator-value"},[C._v("$"+C._s(C.formatPrice(C.result.indicators.levels.resistance)))])]):C._e(),C.result.indicators.volatility?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.volatility")))]),A("div",{staticClass:"indicator-value",class:C.getVolatilityClass(C.result.indicators.volatility.level)},[C._v(" "+C._s(C.translateVolatility(C.result.indicators.volatility.level))+" ("+C._s(C.result.indicators.volatility.pct)+"%) ")])]):C._e()]),C.professionalIndicatorRows.length?A("div",{staticClass:"indicators-pro-wrap"},[A("div",{staticClass:"indicators-pro-title"},[A("a-icon",{attrs:{type:"deployment-unit"}}),C._v(" "+C._s(C.$t("fastAnalysis.indicatorsProTableTitle"))+" ")],1),A("a-descriptions",{staticClass:"indicators-pro-desc",attrs:{bordered:"",size:"small",column:2}},C._l(C.professionalIndicatorRows,function(t){return A("a-descriptions-item",{key:t.key,attrs:{label:t.label}},[A("span",{class:t.valueClass},[C._v(C._s(t.text))])])}),1)],1):C._e()]):C._e(),A("div",{staticClass:"feedback-section"},[A("div",{staticClass:"feedback-question"},[C._v(C._s(C.$t("fastAnalysis.wasHelpful")))]),A("div",{staticClass:"feedback-buttons"},[A("a-button",{attrs:{type:"helpful"===C.userFeedback?"primary":"default",size:"small",loading:"helpful"===C.feedbackLoading},on:{click:function(t){return C.submitFeedback("helpful")}}},[A("a-icon",{attrs:{type:"like"}}),C._v(" "+C._s(C.$t("fastAnalysis.helpful"))+" ")],1),A("a-button",{attrs:{type:"not_helpful"===C.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===C.feedbackLoading},on:{click:function(t){return C.submitFeedback("not_helpful")}}},[A("a-icon",{attrs:{type:"dislike"}}),C._v(" "+C._s(C.$t("fastAnalysis.notHelpful"))+" ")],1)],1),A("div",{staticClass:"analysis-meta"},[A("span",[C._v(C._s(C.$t("fastAnalysis.analysisTime"))+": "+C._s(C.result.analysis_time_ms)+"ms")]),C.result.memory_id?A("span",[C._v("ID: #"+C._s(C.result.memory_id))]):C._e()])])]):A("div",{staticClass:"empty-container"},[A("div",{staticClass:"empty-content"},[A("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),A("div",{staticClass:"empty-title"},[C._v(C._s(C.$t("fastAnalysis.selectSymbol")))]),A("div",{staticClass:"empty-hint"},[C._v(C._s(C.$t("fastAnalysis.selectHint")))])],1)])])},w=[],$={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,m.A)((0,m.A)({},(0,h.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),a=this.elapsedSeconds%60;return"".concat(t,"m ").concat(a,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,a=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return a>=70?"#52c41a":a>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,a=null===(t=this.result)||void 0===t?void 0:t.consensus;return a&&"object"===(0,n.A)(a)?null==a.consensus_decision&&null==a.consensus_score?null:a:null},tradingPlan:function(){var t,a,s,e,i,n,r=(null===(t=this.result)||void 0===t?void 0:t.trading_plan)||{},o=null!==(a=r.entry_price)&&void 0!==a?a:r.entryPrice,l=null!==(s=null!==(e=r.stop_loss)&&void 0!==e?e:r.stopLoss)&&void 0!==s?s:r.loss_exit_price,c=null!==(i=null!==(n=r.take_profit)&&void 0!==n?n:r.takeProfit)&&void 0!==i?i:r.profit_target_price;return{entry_price:o,stop_loss:l,take_profit:c}},trendOutlookRaw:function(){var t,a;return(null===(t=this.result)||void 0===t?void 0:t.trend_outlook)||(null===(a=this.result)||void 0===a?void 0:a.trendOutlook)||null},trendOutlookSummaryText:function(){var t,a,s=(null===(t=this.result)||void 0===t?void 0:t.trend_outlook_summary)||(null===(a=this.result)||void 0===a?void 0:a.trendOutlookSummary);return s&&String(s).trim()?String(s).trim():""},trendOutlookBlocks:function(){var t=this,a=this.trendOutlookRaw;if(!a||"object"!==(0,n.A)(a))return[];var s=[{key:"next_24h",labelKey:"fastAnalysis.outlook24h"},{key:"next_3d",labelKey:"fastAnalysis.outlook3d"},{key:"next_1w",labelKey:"fastAnalysis.outlook1w"},{key:"next_1m",labelKey:"fastAnalysis.outlook1m"}];return s.map(function(s){var e=s.key,i=s.labelKey,n=a[e]||{};return{key:e,label:t.$t(i),trend:n.trend,score:n.score,strength:n.strength}}).filter(function(t){var s=a[t.key];return s&&"object"===(0,n.A)(s)&&(null!=s.trend||null!=s.score)})},stopLossHintText:function(){var t,a=String((null===(t=this.result)||void 0===t?void 0:t.decision)||"").toUpperCase();return"SELL"===a?this.$t("fastAnalysis.stopLossHintShort"):this.$t("fastAnalysis.stopLossHint")},takeProfitHintText:function(){var t,a=String((null===(t=this.result)||void 0===t?void 0:t.decision)||"").toUpperCase();return"SELL"===a?this.$t("fastAnalysis.takeProfitHintShort"):this.$t("fastAnalysis.takeProfitHint")},professionalIndicatorRows:function(){var t,a=(null===(t=this.result)||void 0===t?void 0:t.indicators)||{},s=[],e=function(t,a,e){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";void 0!==e&&null!==e&&""!==e&&s.push({key:t,label:a,text:String(e),valueClass:i})},i=a.macd||{};if(null!=i.value&&e("macd_dif",this.$t("fastAnalysis.macdDif"),this.formatCompactNum(i.value)),null!=i.signal_line&&e("macd_dea",this.$t("fastAnalysis.macdDea"),this.formatCompactNum(i.signal_line)),null!=i.histogram){var n=Number(i.histogram),r=n>0?"bullish":n<0?"bearish":"";e("macd_hist",this.$t("fastAnalysis.macdHist"),this.formatCompactNum(i.histogram),r)}var o=a.moving_averages||{};null!=o.ma5&&e("ma5",this.$t("fastAnalysis.ma5Label"),"$"+this.formatPrice(o.ma5)),null!=o.ma10&&e("ma10",this.$t("fastAnalysis.ma10Label"),"$"+this.formatPrice(o.ma10)),null!=o.ma20&&e("ma20",this.$t("fastAnalysis.ma20Label"),"$"+this.formatPrice(o.ma20));var l=a.bollinger||{};null!=l.BB_upper&&e("bb_u",this.$t("fastAnalysis.bbUpper"),"$"+this.formatPrice(l.BB_upper)),null!=l.BB_middle&&e("bb_m",this.$t("fastAnalysis.bbMiddle"),"$"+this.formatPrice(l.BB_middle)),null!=l.BB_lower&&e("bb_l",this.$t("fastAnalysis.bbLower"),"$"+this.formatPrice(l.BB_lower)),null!=l.BB_width&&e("bb_w",this.$t("fastAnalysis.bbWidthPct"),this.formatNumber(l.BB_width,2)+"%");var c=a.levels||{};null!=c.pivot&&e("piv",this.$t("fastAnalysis.pivotStd"),"$"+this.formatPrice(c.pivot)),null!=c.s1&&e("s1",this.$t("fastAnalysis.levelS1"),"$"+this.formatPrice(c.s1)),null!=c.r1&&e("r1",this.$t("fastAnalysis.levelR1"),"$"+this.formatPrice(c.r1)),null!=c.s2&&e("s2",this.$t("fastAnalysis.levelS2"),"$"+this.formatPrice(c.s2)),null!=c.r2&&e("r2",this.$t("fastAnalysis.levelR2"),"$"+this.formatPrice(c.r2)),null!=c.swing_high&&e("sw_h",this.$t("fastAnalysis.swingHigh20"),"$"+this.formatPrice(c.swing_high)),null!=c.swing_low&&e("sw_l",this.$t("fastAnalysis.swingLow20"),"$"+this.formatPrice(c.swing_low));var d=a.volatility||{};if(null!=d.atr){var u=null!=d.pct?this.formatNumber(d.pct,2)+"% ATR/Price":"";e("atr14",this.$t("fastAnalysis.atr14Label"),"$"+this.formatPrice(d.atr)+(u?" · "+u:""))}var m=a.trading_levels||{};return null!=m.risk_reward_ratio&&Number(m.risk_reward_ratio)>0&&e("rr",this.$t("fastAnalysis.rrLongRef"),"1 : "+this.formatNumber(m.risk_reward_ratio,2)),null!=a.current_price&&e("cref",this.$t("fastAnalysis.refClose"),"$"+this.formatPrice(a.current_price)),s},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a<1?a.toFixed(6):a<100?a.toFixed(4):a<1e4?a.toFixed(2):a.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s.toFixed(a)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var a=Number(t);return Number.isNaN(a)?"--":a.toFixed(1)},formatAgreementPct:function(t){var a=Number(t);return Number.isNaN(a)?"--":"".concat(Math.round(100*a),"%")},formatProgress:function(t){var a=parseFloat(t)||0;return a%1===0?a.toFixed(0):a.toFixed(1)},formatOutlookTrend:function(t){var a=String(t||"HOLD").toUpperCase();return"BUY"===a?this.$t("fastAnalysis.outlookBull"):"SELL"===a?this.$t("fastAnalysis.outlookBear"):this.$t("fastAnalysis.outlookNeutral")},outlookTrendClass:function(t){var a=String(t||"").toUpperCase();return"BUY"===a?"trend-bull":"SELL"===a?"trend-bear":"trend-neutral"},formatCompactNum:function(t){var a=parseFloat(t);return Number.isNaN(a)?"--":0!==a&&Math.abs(a)<1e-4?a.toExponential(2):Math.abs(a)<1?a.toFixed(6):Math.abs(a)<100?a.toFixed(4):a.toFixed(2)},volumeRatioClass:function(t){var a=parseFloat(t);return Number.isNaN(a)?"":a>=1.5?"bullish":a<=.65?"bearish":""},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var a="fastAnalysis.signal.".concat(t),s=this.$t(a);return s===a?t:s},translateTrend:function(t){if(!t)return"--";var a="fastAnalysis.trend.".concat(t),s=this.$t(a);return s===a?t:s},translateVolatility:function(t){if(!t)return"--";var a="fastAnalysis.volatilityLevel.".concat(t),s=this.$t(a);return s===a?t:s},submitFeedback:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(null!==(e=a.result)&&void 0!==e&&e.memory_id){s.n=1;break}return a.$message.warning(a.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),s.a(2);case 1:return a.feedbackLoading=t,s.p=2,s.n=3,C({memory_id:a.result.memory_id,feedback:t});case 3:a.userFeedback=t,a.$message.success(a.$t("fastAnalysis.feedbackThanks")),s.n=5;break;case 4:s.p=4,s.v,a.$message.error(a.$t("fastAnalysis.feedbackFailed"));case 5:return s.p=5,a.feedbackLoading=null,s.f(5);case 6:return s.a(2)}},s,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var a=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-a)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},T=$,x=s(845),M=(0,x.A)(T,S,w,!1,null,"75da11ec",null),P=M.exports,F={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:P},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,currentTaskId:null,taskPollingTimer:null,taskPollingStartedAt:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1,positions:[],monitors:[],positionSummaryMap:{},showPositionModal:!1,showMonitorModal:!1,targetStockForOps:null,positionForm:{side:"long",quantity:null,entryPrice:null},monitorForm:{interval_min:240,notify_channels:[]},batchMode:!1,batchSelectedKeys:[],batchRunning:!1,batchProgress:0,showBatchScheduleModal:!1,batchScheduleForm:{interval_min:240,notify_channels:[]},showTaskDrawer:!1,showEditTaskModal:!1,editTaskLoading:!1,editTaskId:null,editTaskForm:{name:"",interval_min:240,notify_channels:[]}}},computed:(0,m.A)((0,m.A)((0,m.A)({},(0,h.L8)(["userInfo"])),(0,h.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo},watchlistTotalPnl:function(){return Object.values(this.positionSummaryMap).reduce(function(t,a){return t+(Number(a.pnl)||0)},0)},watchlistPositionCount:function(){return Object.values(this.positionSummaryMap).filter(function(t){return t.quantity>0}).length},watchlistTaskCount:function(){return Object.values(this.positionSummaryMap).reduce(function(t,a){return t+(a.monitorCount||0)},0)},batchSelectedAll:function(){return this.watchlist&&this.watchlist.length>0&&this.batchSelectedKeys.length===this.watchlist.length},batchIndeterminate:function(){return this.batchSelectedKeys.length>0&&this.batchSelectedKeys.length<(this.watchlist||[]).length}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadPositionData(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer),this.taskPollingTimer&&(clearInterval(this.taskPollingTimer),this.taskPollingTimer=null)},methods:{stopTaskPolling:function(){this.taskPollingTimer&&(clearInterval(this.taskPollingTimer),this.taskPollingTimer=null),this.currentTaskId=null,this.taskPollingStartedAt=0},pollTaskResult:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.currentTaskId){a.n=1;break}return a.a(2);case 1:return a.p=1,a.n=2,_({page:1,pagesize:50});case 2:if(s=a.v,s&&1===s.code&&s.data){a.n=3;break}return a.a(2);case 3:if(e=s.data.list||[],i=e.find(function(a){return Number(a.id)===Number(t.currentTaskId)}),i){a.n=4;break}return a.a(2);case 4:if(n=String(i.status||"").toLowerCase(),"completed"!==n){a.n=8;break}if(!i.full_result){a.n=5;break}t.analysisResult=i.full_result,a.n=6;break;case 5:return a.n=6,t.viewHistoryResult(i);case 6:return t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),a.n=7,t.refreshUserInfoFromServer();case 7:t.analyzing=!1,t.stopTaskPolling(),a.n=11;break;case 8:if("failed"!==n){a.n=10;break}return t.analysisError=i.error_message||t.$t("dashboard.analysis.message.analysisFailed"),t.analysisErrorTone="error",t.$message.error(t.analysisError),a.n=9,t.refreshUserInfoFromServer();case 9:t.analyzing=!1,t.stopTaskPolling(),a.n=11;break;case 10:Date.now()-t.taskPollingStartedAt>18e4&&(t.$message.warning(t.$t("fastAnalysis.analysisStillProcessing")||"任务仍在处理中,请稍后在历史记录查看"),t.analyzing=!1,t.stopTaskPolling());case 11:a.n=13;break;case 12:a.p=12,a.v;case 13:return a.a(2)}},a,null,[[1,12]])}))()},startTaskPolling:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){return(0,d.A)().w(function(s){while(1)switch(s.n){case 0:return a.stopTaskPolling(),a.currentTaskId=Number(t),a.taskPollingStartedAt=Date.now(),s.n=1,a.pollTaskResult();case 1:a.taskPollingTimer=setInterval(function(){a.pollTaskResult()},2500);case 2:return s.a(2)}},s)}))()},filterSymbolOption:function(t,a){var s,e=(null===(s=a.componentOptions)||void 0===s||null===(s=s.propsData)||void 0===s?void 0:s.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var a=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){a.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},hasMonitorForStock:function(t){if(!t)return!1;var a="".concat(t.market,":").concat(t.symbol),s=this.positionSummaryMap[a];return!!(s&&s.monitorCount>0)},getMonitorMeta:function(t){if(!t)return null;var a="".concat(t.market,":").concat(t.symbol),s=this.positionSummaryMap[a];return!s||s.monitorCount<=0?null:{activeCount:s.activeMonitorCount||0,nextRunAtText:s.nextRunAtText||""}},getPnlBarStyle:function(t){var a=Math.abs(Number((null===t||void 0===t?void 0:t.pnlPercent)||0)),s=Math.min(100,Math.max(4,a));return{width:"".concat(s,"%")}},_formatNextRunText:function(t){if(!t)return"";try{var a=new Date(t);return Number.isNaN(a.getTime())?"":a.toLocaleString(this.isZhLocale?"zh-CN":"en-US",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch(s){return""}},buildPositionSummary:function(){var t=this,a={},s=Array.isArray(this.positions)?this.positions:[],e=Array.isArray(this.monitors)?this.monitors:[],i=new Set,n={};s.forEach(function(t){n[Number(t.id)]="".concat(t.market,":").concat(t.symbol)}),e.forEach(function(s){var e=Array.isArray(s.position_ids)?s.position_ids:[];e.forEach(function(t){return i.add(Number(t))});var r=!!s.is_active,o=s.next_run_at||"";e.forEach(function(s){var e=n[Number(s)];e&&(a[e]||(a[e]={quantity:0,weightedEntry:0,pnl:0,marketValue:0,monitorCount:0,activeMonitorCount:0,nextRunAtText:""}),a[e].monitorCount+=1,r&&(a[e].activeMonitorCount+=1),!a[e].nextRunAtText&&o&&(a[e].nextRunAtText=t._formatNextRunText(o)))})}),s.forEach(function(t){var s="".concat(t.market,":").concat(t.symbol),e=Number(t.quantity||0),n=Number(t.entry_price||0);a[s]||(a[s]={quantity:0,weightedEntry:0,pnl:0,marketValue:0,monitorCount:0,activeMonitorCount:0,nextRunAtText:""}),a[s].quantity+=e,a[s].weightedEntry+=e*n,a[s].pnl+=Number(t.pnl||0),a[s].marketValue+=Number(t.market_value||0),i.has(Number(t.id))&&(a[s].monitorCount+=1)}),Object.keys(a).forEach(function(t){var s=a[t];s.avgEntry=s.quantity>0?s.weightedEntry/s.quantity:0;var e=s.quantity>0?s.weightedEntry:0;s.pnlPercent=e>0?s.pnl/e*100:0}),this.positionSummaryMap=a},toggleStockMonitor:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i,n,r,o,l;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(e="".concat(t.market,":").concat(t.symbol),i=(a.positions||[]).filter(function(t){return"".concat(t.market,":").concat(t.symbol)===e}).map(function(t){return Number(t.id)}).filter(Boolean),0!==i.length){s.n=1;break}return s.a(2);case 1:if(n=(a.monitors||[]).filter(function(t){var a=Array.isArray(t.position_ids)?t.position_ids.map(function(t){return Number(t)}):[];return a.some(function(t){return i.includes(t)})}),0!==n.length){s.n=2;break}return s.a(2);case 2:return r=!n.some(function(t){return!!t.is_active}),s.p=3,s.n=4,Promise.all(n.map(function(t){return(0,y.sk)(t.id,{is_active:r})}));case 4:return a.$message.success(r?a.$t("aiAssetAnalysis.monitor.enabled")||"已启用任务":a.$t("aiAssetAnalysis.monitor.disabled")||"已暂停任务"),s.n=5,a.loadPositionData();case 5:s.n=7;break;case 6:s.p=6,l=s.v,a.$message.error((null===l||void 0===l||null===(o=l.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===l||void 0===l?void 0:l.message)||"Toggle monitor failed");case 7:return s.a(2)}},s,null,[[3,6]])}))()},loadPositionData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,Promise.all([(0,y.Dt)(),(0,y.w1)()]);case 1:s=a.v,e=(0,c.A)(s,2),i=e[0],n=e[1],t.positions=i&&1===i.code&&i.data||[],t.monitors=n&&1===n.code&&n.data||[],t.buildPositionSummary(),a.n=3;break;case 2:a.p=2,a.v,t.positions=[],t.monitors=[],t.positionSummaryMap={};case 3:return a.a(2)}},a,null,[[0,2]])}))()},openPositionModal:function(t){this.targetStockForOps=t;var a="".concat(t.market,":").concat(t.symbol),s=(this.positions||[]).find(function(t){return"".concat(t.market,":").concat(t.symbol)===a});if(s){var e=Number(s.quantity||0);this.positionForm={side:s.side||(e<0?"short":"long"),quantity:Math.abs(e)||null,entryPrice:Number(s.entry_price||0)||null}}else this.positionForm={side:"long",quantity:null,entryPrice:null};this.showPositionModal=!0},savePosition:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=t.targetStockForOps,s){a.n=1;break}return a.a(2);case 1:if(e=Number(t.positionForm.quantity||0),i=Number(t.positionForm.entryPrice||0),e>0&&i>0){a.n=2;break}return t.$message.warning(t.$i18n&&"zh-CN"===t.$i18n.locale?"请输入有效的数量和买入单价":"Please enter valid quantity and entry price"),a.a(2);case 2:return a.p=2,a.n=3,(0,y.Ps)({market:s.market,symbol:s.symbol,name:s.name||s.symbol,side:t.positionForm.side||"long",quantity:e,entry_price:i});case 3:if(n=a.v,!n||1!==n.code){a.n=5;break}return t.$message.success(t.$t("portfolio.positions.add")+" OK"),t.showPositionModal=!1,a.n=4,t.loadPositionData();case 4:a.n=6;break;case 5:t.$message.error((null===n||void 0===n?void 0:n.msg)||"Add position failed");case 6:a.n=8;break;case 7:a.p=7,o=a.v,t.$message.error((null===o||void 0===o||null===(r=o.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.msg)||(null===o||void 0===o?void 0:o.message)||"Add position failed");case 8:return a.a(2)}},a,null,[[2,7]])}))()},openMonitorModal:function(t){this.targetStockForOps=t,this.monitorForm={interval_min:240,notify_channels:[]},this.showMonitorModal=!0},saveMonitorTask:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o,l,c;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=t.targetStockForOps,s){a.n=1;break}return a.a(2);case 1:return e="".concat(s.market,":").concat(s.symbol),i=t.monitorForm.interval_min,n=t.monitorForm.notify_channels||[],r=(t.positions||[]).filter(function(t){return"".concat(t.market,":").concat(t.symbol)===e}).map(function(t){return Number(t.id)}).filter(Boolean),a.p=2,a.n=3,(0,y.yr)({name:"AI-".concat(s.symbol,"-").concat(i,"m"),position_ids:r,monitor_type:"ai",config:{run_interval_minutes:i,symbol:s.symbol,market:s.market},notification_config:{channels:n},is_active:!0});case 3:if(o=a.v,!o||1!==o.code){a.n=5;break}return t.$message.success(t.$t("aiAssetAnalysis.monitor.created")),t.showMonitorModal=!1,a.n=4,t.loadPositionData();case 4:a.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||"Create monitor failed");case 6:a.n=8;break;case 7:a.p=7,c=a.v,t.$message.error((null===c||void 0===c||null===(l=c.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.msg)||(null===c||void 0===c?void 0:c.message)||"Create monitor failed");case 8:return a.a(2)}},a,null,[[2,7]])}))()},toggleBatchMode:function(){this.batchMode=!this.batchMode,this.batchMode||(this.batchSelectedKeys=[])},onBatchSelectAll:function(t){t.target.checked?this.batchSelectedKeys=(this.watchlist||[]).map(function(t){return"".concat(t.market,":").concat(t.symbol)}):this.batchSelectedKeys=[]},onBatchItemToggle:function(t,a){var s="".concat(t.market,":").concat(t.symbol);a.target.checked?this.batchSelectedKeys.includes(s)||this.batchSelectedKeys.push(s):this.batchSelectedKeys=this.batchSelectedKeys.filter(function(t){return t!==s})},openBatchScheduleModal:function(){0!==this.batchSelectedKeys.length&&(this.batchScheduleForm={interval_min:240,notify_channels:[]},this.showBatchScheduleModal=!0)},saveBatchSchedule:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,u,m,h,p;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=(0,l.A)(t.batchSelectedKeys),0!==s.length){a.n=1;break}return a.a(2);case 1:t.batchRunning=!0,e=t.batchScheduleForm.interval_min,i=t.batchScheduleForm.notify_channels||[],n=0,u=(0,o.A)(s),a.p=2,h=(0,d.A)().m(function a(){var s,r,o,l,u,h,p;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=m.value,r=s.split(":"),o=(0,c.A)(r,2),l=o[0],u=o[1],h=(t.watchlist||[]).find(function(t){return t.market===l&&t.symbol===u}),h){a.n=1;break}return a.a(2,1);case 1:return p=(t.positions||[]).filter(function(t){return"".concat(t.market,":").concat(t.symbol)===s}).map(function(t){return Number(t.id)}).filter(Boolean),a.p=2,a.n=3,(0,y.yr)({name:"AI-".concat(u,"-").concat(e,"m"),position_ids:p,monitor_type:"ai",config:{run_interval_minutes:e,symbol:u,market:l},notification_config:{channels:i},is_active:!0});case 3:n++,a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[2,4]])}),u.s();case 3:if((m=u.n()).done){a.n=6;break}return a.d((0,r.A)(h()),4);case 4:if(!a.v){a.n=5;break}return a.a(3,5);case 5:a.n=3;break;case 6:a.n=8;break;case 7:a.p=7,p=a.v,u.e(p);case 8:return a.p=8,u.f(),a.f(8);case 9:return t.batchRunning=!1,t.showBatchScheduleModal=!1,t.batchMode=!1,t.batchSelectedKeys=[],a.n=10,t.loadPositionData();case 10:t.$message.success(t.$t("aiAssetAnalysis.batch.done")+" (".concat(n,"/").concat(s.length,")"));case 11:return a.a(2)}},a,null,[[2,7,8,9]])}))()},formatIntervalText:function(t){return t>=1440?"".concat(Math.round(t/1440),"d"):t>=60?"".concat(Math.round(t/60),"h"):"".concat(t,"m")},handleToggleTask:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,y.sk)(t.id,{is_active:!t.is_active});case 1:return a.$message.success(t.is_active?a.$t("aiAssetAnalysis.tasks.paused"):a.$t("aiAssetAnalysis.tasks.resumed")),s.n=2,a.loadPositionData();case 2:s.n=4;break;case 3:s.p=3,i=s.v,a.$message.error((null===i||void 0===i||null===(e=i.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||(null===i||void 0===i?void 0:i.message)||"Failed");case 4:return s.a(2)}},s,null,[[0,3]])}))()},handleEditTask:function(t){this.editTaskId=t.id,this.editTaskForm={name:t.name||"",interval_min:t.config&&t.config.run_interval_minutes||240,notify_channels:t.notification_config&&t.notification_config.channels||[]},this.showEditTaskModal=!0},saveEditTask:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.editTaskId){a.n=1;break}return a.a(2);case 1:return t.editTaskLoading=!0,a.p=2,a.n=3,(0,y.sk)(t.editTaskId,{name:t.editTaskForm.name,config:{run_interval_minutes:t.editTaskForm.interval_min},notification_config:{channels:t.editTaskForm.notify_channels}});case 3:return t.$message.success("OK"),t.showEditTaskModal=!1,a.n=4,t.loadPositionData();case 4:a.n=6;break;case 5:a.p=5,e=a.v,t.$message.error((null===e||void 0===e||null===(s=e.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||(null===e||void 0===e?void 0:e.message)||"Failed");case 6:return a.p=6,t.editTaskLoading=!1,a.f(6);case 7:return a.a(2)}},a,null,[[2,5,6,7]])}))()},handleDeleteTask:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,y.ei)(t.id);case 1:return a.$message.success(a.$t("aiAssetAnalysis.tasks.deleted")),s.n=2,a.loadPositionData();case 2:s.n=4;break;case 3:s.p=3,i=s.v,a.$message.error((null===i||void 0===i||null===(e=i.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||(null===i||void 0===i?void 0:i.message)||"Failed");case 4:return s.a(2)}},s,null,[[0,3]])}))()},loadMarketData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){return(0,d.A)().w(function(a){while(1)switch(a.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return a.a(2)}},a)}))()},loadSentimentData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingSentiment=!0,a.p=1,a.n=2,(0,A.EF)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&null!==s&&void 0!==s&&s.data&&(t.marketData.fearGreed=(null===(e=s.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=s.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(n=s.data.dxy)||void 0===n?void 0:n.value)||null),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingIndices=!0,a.p=1,a.n=2,(0,A.yI)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&null!==s&&void 0!==s&&s.data&&(t.marketData.indices=s.data.indices||[]),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingIndices=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingHeatmap=!0,a.p=1,a.n=2,(0,A.f$)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&null!==s&&void 0!==s&&s.data&&(t.marketData.heatmap={crypto:s.data.crypto||[],commodities:s.data.commodities||[],sectors:s.data.sectors||[],forex:s.data.forex||[]}),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingCalendar=!0,a.p=1,a.n=2,(0,A.kF)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&(t.marketData.calendar=s.data||[]),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(a)},getHeatmapStyle:function(t){var a=parseFloat(t)||0,s=Math.min(Math.abs(a)/5,1),e=this.isDarkTheme;if(a>=0){var i=e?a>2?"#fff":"#4ade80":a>2?"#fff":"#166534";return{background:"rgba(34, 197, 94, ".concat(.15+.6*s,")"),color:i}}var n=e?a<-2?"#fff":"#f87171":a<-2?"#fff":"#991b1b";return{background:"rgba(239, 68, 68, ".concat(.15+.6*s,")"),color:n}},getCountryFlag:function(t){var a={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return a[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var a=new Date(t),s=new Date,e=new Date(s);if(e.setDate(e.getDate()+1),a.toDateString()===s.toDateString())return this.isZhLocale?"今天":"Today";if(a.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=a.getMonth()+1,n=a.getDate();return"".concat(i,"/").concat(n)}catch(r){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var a={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return a[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var a=Number(t);return Number.isNaN(a)?String(t):Number.isInteger(a)?String(a):a.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,p.ug)();case 1:s=a.v,s&&1===s.code&&s.data&&(t.localUserInfo=s.data,t.userId=s.data.id,t.$store.commit("SET_INFO",s.data)),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o,l,u,h,p,v,y,f,b,_,k,C;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(!t.analyzing){a.n=1;break}return a.a(2);case 1:if(t.selectedSymbol){a.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),a.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",s=t.selectedSymbol.split(":"),e=(0,c.A)(s,2),i=e[0],n=e[1],r=t.$store.getters.lang||"zh-CN",o=!1,a.p=3,a.n=4,g({market:i,symbol:n,language:r,timeframe:"1D",async_submit:!0});case 4:if(l=a.v,!l||1!==l.code||!l.data){a.n=9;break}if("processing"!==l.data.status){a.n=6;break}return o=!0,u=l.data.remaining_credits,void 0!==u&&null!==u?t.$message.success(t.$t("fastAnalysis.analysisSubmittedWithCredits",{remaining:t.formatCreditNum(u)})):t.$message.success(t.$t("fastAnalysis.analysisSubmitted")||"任务已提交,正在分析中"),a.n=5,t.startTaskPolling(l.data.task_id);case 5:a.n=7;break;case 6:h=(0,m.A)({},l.data),delete h.credits_charged,delete h.remaining_credits,t.analysisResult=h,p=l.data.remaining_credits,void 0!==p&&null!==p?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(p)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete"));case 7:return a.n=8,t.refreshUserInfoFromServer();case 8:a.n=10;break;case 9:throw new Error((null===l||void 0===l?void 0:l.msg)||"分析失败");case 10:a.n=12;break;case 11:a.p=11,C=a.v,f=null===C||void 0===C||null===(v=C.response)||void 0===v?void 0:v.status,b=(null===C||void 0===C||null===(y=C.response)||void 0===y?void 0:y.data)||{},_=b.msg,k=b.data,429===f&&k&&k.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===f&&"Insufficient credits"===_?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===k||void 0===k?void 0:k.required),current:t.formatCreditNum(null===k||void 0===k?void 0:k.current),shortage:t.formatCreditNum(null===k||void 0===k?void 0:k.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=_||(null===C||void 0===C?void 0:C.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 12:return a.p=12,o||(t.analyzing=!1),a.f(12);case 13:return a.a(2)}},a,null,[[3,11,12,13]])}))()},loadHistoryList:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPage,pagesize:t.historyPageSize});case 2:s=a.v,s&&1===s.code&&s.data&&(t.historyList=s.data.list||[],t.historyTotal=s.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i,n,r;return(0,d.A)().w(function(s){while(1)switch(s.n){case 0:if("processing"!==(t.status||"").toLowerCase()){s.n=1;break}return a.$message.info(a.$t("fastAnalysis.analysisStillProcessing")||"该任务仍在处理中,请稍后刷新历史记录"),s.a(2);case 1:if(!t.full_result){s.n=2;break}return a.analysisResult=t.full_result,a.selectedSymbol="".concat(t.market,":").concat(t.symbol),a.showHistoryModal=!1,s.a(2);case 2:e=Number(t.price)||0,i=String(t.decision||"HOLD").toUpperCase(),n=null,r=null,e>0&&("SELL"===i?(n=1.05*e,r=.95*e):"BUY"===i&&(n=.95*e,r=1.05*e)),a.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:n,take_profit:r},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},a.selectedSymbol="".concat(t.market,":").concat(t.symbol),a.showHistoryModal=!1;case 3:return s.a(2)}},s)}))()},deleteHistoryItem:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,k(t.id);case 1:e=s.v,e&&1===e.code?(a.$message.success(a.$t("dashboard.analysis.message.deleteSuccess")),a.loadHistoryList()):a.$message.error((null===e||void 0===e?void 0:e.msg)||a.$t("dashboard.analysis.message.deleteFailed")),s.n=3;break;case 2:s.p=2,s.v,a.$message.error(a.$t("dashboard.analysis.message.deleteFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var a=new Date(1e3*t);return a.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var a=new Date(t);return a.toLocaleString("zh-CN")},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red"};return a[t]||"default"},getStatusText:function(t){var a={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},s=a[t];return s?this.$t(s):t},loadUserInfo:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.loadingUserInfo=!0,a.p=1,!t.storeUserInfo||!t.storeUserInfo.email){a.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),a.a(2);case 2:return a.n=3,(0,p.ug)();case 3:s=a.v,s&&1===s.code&&s.data&&(t.localUserInfo=s.data,t.userId=s.data.id,t.$store.commit("SET_INFO",s.data),t.loadWatchlist()),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.p=5,t.loadingUserInfo=!1,a.f(5);case 6:return a.a(2)}},a,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.userId){a.n=1;break}return a.a(2);case 1:return t.loadingWatchlist=!0,a.p=2,a.n=3,(0,v.Qo)({userid:t.userId});case 3:if(s=a.v,!s||1!==s.code||!s.data){a.n=4;break}return t.watchlist=s.data.map(function(t){return(0,m.A)((0,m.A)({},t),{},{price:0,change:0,changePercent:0})}),a.n=4,t.loadWatchlistPrices();case 4:a.n=6;break;case 5:a.p=5,a.v;case 6:return a.p=6,t.loadingWatchlist=!1,a.f(6);case 7:return a.a(2)}},a,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.watchlist&&0!==t.watchlist.length){a.n=1;break}return a.a(2);case 1:return a.p=1,s=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),a.n=2,(0,v.ms)({watchlist:s});case 2:e=a.v,e&&1===e.code&&e.data&&(i={},n={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,n["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=n,t.watchlist=t.watchlist.map(function(t){var a="".concat(t.market,"-").concat(t.symbol),s=i[a];return s?(0,m.A)((0,m.A)({},t),{},{price:s.price||0,change:s.change||0,changePercent:s.changePercent||0}):t})),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o,l;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s="",e="",i="",!t.selectedSymbolForAdd){a.n=1;break}s=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",a.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){a.n=3;break}if(t.selectedMarketTab){a.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:s=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",a.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),a.a(2);case 4:return t.addingStock=!0,a.p=5,a.n=6,(0,v.dp)({userid:t.userId,market:s,symbol:e,name:i});case 6:if(n=a.v,!n||1!==n.code){a.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),a.n=7,t.loadWatchlist();case 7:a.n=9;break;case 8:t.$message.error((null===n||void 0===n?void 0:n.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:a.n=11;break;case 10:a.p=10,l=a.v,o=(null===l||void 0===l||null===(r=l.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.msg)||(null===l||void 0===l?void 0:l.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return a.p=11,t.addingStock=!1,a.f(11);case 12:return a.a(2)}},a,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var a=this,s=t.target.value;if(this.symbolSearchKeyword=s,this.searchTimer&&clearTimeout(this.searchTimer),!s||""===s.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){a.searchSymbolsInModal(s)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t&&""!==t.trim()){s.n=1;break}return a.symbolSearchResults=[],a.hasSearched=!1,s.a(2);case 1:if(a.selectedMarketTab){s.n=2;break}return a.$message.warning(a.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:return a.searchingSymbols=!0,a.hasSearched=!0,s.p=3,s.n=4,(0,v._3)({market:a.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=s.v,e&&1===e.code&&e.data&&e.data.length>0?a.symbolSearchResults=e.data:(a.symbolSearchResults=[],a.selectedSymbolForAdd={market:a.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),s.n=6;break;case 5:s.p=5,s.v,a.symbolSearchResults=[],a.selectedSymbolForAdd={market:a.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return s.p=6,a.searchingSymbols=!1,s.f(6);case 7:return s.a(2)}},s,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t||(t=a.selectedMarketTab||(a.marketTypes.length>0?a.marketTypes[0].value:"")),t){s.n=1;break}return s.a(2);case 1:return a.loadingHotSymbols=!0,s.p=2,s.n=3,(0,v.z6)({market:t,limit:10});case 3:e=s.v,e&&1===e.code&&e.data?a.hotSymbols=e.data:a.hotSymbols=[],s.n=5;break;case 4:s.p=4,s.v,a.hotSymbols=[];case 5:return s.p=5,a.loadingHotSymbols=!1,s.f(5);case 6:return s.a(2)}},s,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var a=arguments,s=this;return(0,u.A)((0,d.A)().m(function e(){var i,r,o;return(0,d.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(s.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,n.A)(t)?t.symbol:t,r="object"===(0,n.A)(t)?t.market:a[1],e.p=2,e.n=3,(0,v.mk)({userid:s.userId,symbol:i,market:r});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return s.$message.success(s.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,s.loadWatchlist();case 4:e.n=6;break;case 5:s.$message.error((null===o||void 0===o?void 0:o.msg)||s.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,s.$message.error(s.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,v.iO)();case 1:s=a.v,s&&1===s.code&&s.data&&Array.isArray(s.data)?t.marketTypes=s.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],a.n=3;break;case 2:a.p=2,a.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return a.a(2)}},a,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var a=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){a.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},N=F,I=(0,x.A)(N,e,i,!1,null,"5cbe52d9",null),D=I.exports},44146:function(t,a,s){s.d(a,{EF:function(){return l},f$:function(){return r},kF:function(){return o},r9:function(){return c},yI:function(){return n}});var e=s(75769),i="/api/global-market";function n(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function r(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},35038:function(t,a,s){s.d(a,{Qo:function(){return n},_3:function(){return d},dp:function(){return r},iO:function(){return c},mk:function(){return o},ms:function(){return l},z6:function(){return u}});var e=s(75769),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function n(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function r(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}},24364:function(t,a,s){s.d(a,{$p:function(){return o},Dt:function(){return i},Iw:function(){return v},Ps:function(){return n},Xg:function(){return r},_3:function(){return g},aU:function(){return h},bC:function(){return l},cg:function(){return y},ei:function(){return m},f:function(){return b},iO:function(){return _},qS:function(){return f},qu:function(){return p},sk:function(){return u},w1:function(){return c},yr:function(){return d}});var e=s(75769);function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,e.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function n(t){return(0,e.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function r(t,a){return(0,e.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:a})}function o(t){return(0,e.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,e.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function c(){return(0,e.Ay)({url:"/api/portfolio/monitors",method:"get"})}function d(t){return(0,e.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function u(t,a){return(0,e.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:a})}function m(t){return(0,e.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function h(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,e.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:a})}function p(){return(0,e.Ay)({url:"/api/portfolio/alerts",method:"get"})}function v(t){return(0,e.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function y(t,a){return(0,e.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:a})}function f(t){return(0,e.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function b(){return(0,e.Ay)({url:"/api/portfolio/groups",method:"get"})}function g(t){return(0,e.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function _(){return(0,e.Ay)({url:"/api/market/types",method:"get"})}},21560:function(t,a,s){s.d(a,{A:function(){return i}});var e=s(44735);function i(t){if(null!=t){var a=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],s=0;if(a)return a.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&s>=t.length&&(t=void 0),{value:t&&t[s++],done:!t}}}}throw new TypeError((0,e.A)(t)+" is not iterable")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/734-legacy.1e8a348d.js b/frontend/dist/js/734-legacy.1e8a348d.js deleted file mode 100644 index bad0ff4..0000000 --- a/frontend/dist/js/734-legacy.1e8a348d.js +++ /dev/null @@ -1,18 +0,0 @@ -(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[734],{11485:function(t,e,i){"use strict";i.r(e),i.d(e,{default:function(){return ua}});i(52675),i(89463),i(62010),i(9868);var n=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-container",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"chart-header"},[e("div",{staticClass:"header-top"},[e("div",{staticClass:"header-left"},[e("div",{staticClass:"search-section"},[e("a-select",{staticClass:"symbol-select",attrs:{"show-search":"",placeholder:t.$t("dashboard.indicator.selectSymbol"),dropdownClassName:"dark-dropdown","filter-option":t.filterSymbolOption,"not-found-content":null,open:t.symbolSearchOpen},on:{search:t.handleSymbolSearch,change:t.handleSymbolSelect,dropdownVisibleChange:t.handleDropdownVisibleChange},model:{value:t.searchSymbol,callback:function(e){t.searchSymbol=e},expression:"searchSymbol"}},[e("a-icon",{staticStyle:{color:"#999"},attrs:{slot:"suffixIcon",type:"search"},slot:"suffixIcon"}),t._l(t.symbolSuggestions,function(i){return e("a-select-option",{key:i.value,attrs:{value:i.value}},[e("div",{staticClass:"symbol-option"},[e("a-tag",{staticStyle:{"margin-right":"8px","margin-bottom":"0"},attrs:{color:t.getMarketColor(i.market)}},[t._v(" "+t._s(t.getMarketName(i.market))+" ")]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.symbol))]),i.name?e("span",{staticClass:"symbol-name-extra"},[t._v(t._s(i.name))]):t._e()],1)])}),e("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[e("div",{staticStyle:{width:"100%","text-align":"center",padding:"4px 0",color:"#1890ff",cursor:"pointer"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),e("span",[t._v(t._s(t.$t("dashboard.analysis.watchlist.add")))])],1)])],2)],1),e("div",{staticClass:"timeframe-group"},t._l(["1m","5m","15m","30m","1H","4H","1D","1W"],function(i){return e("div",{key:i,staticClass:"timeframe-item",class:{active:t.timeframe===i},on:{click:function(e){return t.setTimeframe(i)}}},[t._v(" "+t._s(i)+" ")])}),0)]),t.currentSymbol?e("div",{staticClass:"current-symbol"},[e("div",{staticClass:"symbol-info"},[e("span",{staticClass:"symbol-label"},[t._v(t._s(t.currentSymbol))]),e("span",{staticClass:"market-tag"},[t._v(t._s(t.currentMarket))])]),e("div",{staticClass:"price-info",class:t.priceChangeClass},[e("span",{staticClass:"symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])]),t.isCryptoMarket?e("a-button",{staticClass:"qt-header-btn",attrs:{size:"small"},on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}}),t._v(" "+t._s(t.$t("quickTrade.openPanel"))+" ")],1):t._e()],1):t._e()])]),e("div",{staticClass:"chart-content"},[e("div",{staticClass:"chart-main-row"},[t.currentSymbol?e("div",{staticClass:"mobile-symbol-price"},[e("div",{staticClass:"mobile-symbol-info"},[e("span",{staticClass:"mobile-market-tag"},[t._v(t._s(t.currentMarket))]),e("span",[t._v("-")]),e("span",{staticClass:"mobile-symbol-label"},[t._v(t._s(t.currentSymbol))])]),e("div",{staticClass:"mobile-price-info",class:t.priceChangeClass},[e("span",{staticClass:"mobile-symbol-price"},[t._v(t._s(t.currentPrice))]),e("span",{staticClass:"mobile-symbol-change"},[t._v(" "+t._s(t.priceChange>0?"+":"")+t._s(t.priceChange.toFixed(2))+"% ")])])]):t._e(),e("kline-chart",{ref:"klineChart",attrs:{symbol:t.currentSymbol,market:t.currentMarket,timeframe:t.timeframe,theme:t.chartTheme,activeIndicators:t.activeIndicators,realtimeEnabled:t.realtimeEnabled},on:{"price-change":t.handlePriceChange,retry:t.handleChartRetry,"indicator-toggle":t.handleIndicatorToggle}}),e("div",{staticClass:"chart-right"},[e("div",{staticClass:"indicators-panel"},[e("div",{staticClass:"panel-header"},[e("span",[t._v(t._s(t.$t("dashboard.indicator.panel.title")))]),e("div",{staticStyle:{display:"flex","align-items":"center","margin-left":"auto",gap:"8px"}},[t.isMobile?e("a-button",{staticClass:"mobile-header-create-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:t.handleCreateIndicator}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")]):t._e(),e("a-tooltip",{attrs:{title:t.realtimeEnabled?t.$t("dashboard.indicator.panel.realtimeOn"):t.$t("dashboard.indicator.panel.realtimeOff")}},[e("a-button",{staticClass:"realtime-toggle-btn",class:{active:t.realtimeEnabled},attrs:{type:"text"},on:{click:t.toggleRealtime}},[e("a-icon",{attrs:{type:t.realtimeEnabled?"sync":"pause-circle",spin:t.realtimeEnabled}})],1)],1)],1)]),e("div",{staticClass:"panel-body"},[t.isMobile?[e("div",{staticClass:"mobile-tab-content"},[e("div",{staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)])]:[e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.customIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:t.toggleCustomSection}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.customSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.myCreated"))+" ("+t._s(t.customIndicators.length)+")")])],1),e("a-button",{staticClass:"create-indicator-btn",attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(e){return e.stopPropagation(),t.handleCreateIndicator.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.create"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.customSectionCollapsed,expression:"!customSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.customIndicators,function(i){return e("div",{key:"custom-"+i.id,class:["indicator-card",{"indicator-active":t.isIndicatorActive("custom-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"custom")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[t._v(t._s(i.name))]),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.edit")}},[e("a-icon",{staticClass:"action-icon edit-icon",attrs:{type:"edit"},on:{click:function(e){return e.stopPropagation(),t.handleEditIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.action.delete")}},[e("a-icon",{staticClass:"action-icon delete-icon",attrs:{type:"delete"},on:{click:function(e){return e.stopPropagation(),t.handleDeleteIndicator(i)}}})],1),e("a-tooltip",{attrs:{title:t.isIndicatorActive("custom-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("custom-"+i.id)}],attrs:{type:t.isIndicatorActive("custom-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"custom")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1),e("a-tooltip",{attrs:{title:i.publish_to_community?t.$t("dashboard.indicator.action.unpublish"):t.$t("dashboard.indicator.action.publish")}},[e("a-icon",{class:["action-icon","publish-icon",{published:i.publish_to_community}],attrs:{type:i.publish_to_community?"cloud":"cloud-upload"},on:{click:function(e){return e.stopPropagation(),t.handlePublishIndicator(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.customIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"info-circle"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.empty")))])],1):t._e()],2)]),e("div",{staticClass:"indicator-section",class:{"section-empty":0===t.purchasedIndicators.length}},[e("div",{staticClass:"section-label"},[e("div",{staticClass:"section-label-left",on:{click:function(e){t.purchasedSectionCollapsed=!t.purchasedSectionCollapsed}}},[e("a-icon",{staticClass:"collapse-icon",attrs:{type:t.purchasedSectionCollapsed?"right":"down"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.section.purchased"))+" ("+t._s(t.purchasedIndicators.length)+")")])],1),e("a-button",{staticClass:"buy-indicator-btn",attrs:{type:"link",size:"small",icon:"shop"},on:{click:function(e){return e.stopPropagation(),t.goToIndicatorMarket.apply(null,arguments)}}},[t._v(" "+t._s(t.$t("menu.dashboard.community"))+" ")])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:!t.purchasedSectionCollapsed,expression:"!purchasedSectionCollapsed"}],staticClass:"section-content custom-scrollbar"},[t._l(t.purchasedIndicators,function(i){return e("div",{key:"purchased-"+i.id,class:["indicator-card","purchased-indicator",{"indicator-active":t.isIndicatorActive("purchased-"+i.id)}],on:{click:function(e){return t.toggleIndicator(i,"purchased")}}},[e("div",{staticClass:"card-content"},[e("div",{staticClass:"card-header"},[e("span",{staticClass:"card-name"},[e("a-icon",{staticClass:"purchased-icon",attrs:{type:"shopping"}}),t._v(" "+t._s(i.name)+" ")],1),e("div",{staticClass:"card-actions"},[e("a-tooltip",{attrs:{title:t.isIndicatorActive("purchased-"+i.id)?t.$t("dashboard.indicator.action.stop"):t.$t("dashboard.indicator.action.start")}},[e("a-icon",{class:["action-icon","toggle-icon",{active:t.isIndicatorActive("purchased-"+i.id)}],attrs:{type:t.isIndicatorActive("purchased-"+i.id)?"pause-circle":"play-circle"},on:{click:function(e){return e.stopPropagation(),t.toggleIndicator(i,"purchased")}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.title")}},[e("a-icon",{staticClass:"action-icon backtest-icon",attrs:{type:"experiment"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktest(i)}}})],1),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle")}},[e("a-icon",{staticClass:"action-icon backtest-history-icon",attrs:{type:"clock-circle"},on:{click:function(e){return e.stopPropagation(),t.handleOpenBacktestHistory(i)}}})],1)],1)]),e("span",{staticClass:"card-desc"},[t._v(t._s(i.description||""))])])])}),0===t.purchasedIndicators.length?e("div",{staticClass:"empty-indicators"},[e("a-icon",{attrs:{type:"shopping"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.emptyPurchased")))])],1):t._e()],2)])]],2)])])],1),e("indicator-editor",{ref:"indicatorEditor",attrs:{visible:t.showIndicatorEditor,indicator:t.editingIndicator,userId:t.userId},on:{run:t.handleRunIndicator,save:t.handleSaveIndicator,cancel:function(e){t.showIndicatorEditor=!1,t.editingIndicator=null}}}),e("backtest-modal",{attrs:{visible:t.showBacktestModal,userId:t.userId,indicator:t.backtestIndicator,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe},on:{cancel:function(e){t.showBacktestModal=!1,t.backtestIndicator=null}}}),e("a-modal",{attrs:{visible:t.showParamsModal,title:t.$t("dashboard.indicator.paramsConfig.title"),confirmLoading:t.loadingParams,width:500,maskClosable:!1,keyboard:!1},on:{ok:t.confirmIndicatorParams,cancel:t.cancelIndicatorParams,afterClose:t.handleParamsModalAfterClose}},[t.pendingIndicator?e("div",{staticClass:"params-config-modal"},[e("div",{staticClass:"indicator-info"},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.pendingIndicator.name))])]),e("a-divider"),t.indicatorParams.length>0?e("div",{staticClass:"params-form"},t._l(t.indicatorParams,function(i){return e("div",{key:i.name,staticClass:"param-item"},[e("div",{staticClass:"param-header"},[e("label",{staticClass:"param-label"},[t._v(t._s(i.name))]),i.description?e("a-tooltip",{attrs:{title:i.description}},[e("a-icon",{staticStyle:{color:"#999","margin-left":"4px"},attrs:{type:"question-circle"}})],1):t._e()],1),"int"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:0},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"float"===i.type?e("a-input-number",{staticStyle:{width:"100%"},attrs:{precision:4},model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):"bool"===i.type?e("a-switch",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}}):e("a-input",{model:{value:t.indicatorParamValues[i.name],callback:function(e){t.$set(t.indicatorParamValues,i.name,e)},expression:"indicatorParamValues[param.name]"}})],1)}),0):e("a-empty",{attrs:{description:t.$t("dashboard.indicator.paramsConfig.noParams")}})],1):t._e()]),e("backtest-history-drawer",{attrs:{visible:t.showBacktestHistoryDrawer,userId:t.userId,indicatorId:t.backtestHistoryIndicator?t.backtestHistoryIndicator.id:null,symbol:t.selectedSymbol,market:t.selectedMarket,timeframe:t.selectedTimeframe,isMobile:t.isMobile},on:{cancel:function(e){t.showBacktestHistoryDrawer=!1,t.backtestHistoryIndicator=null},view:t.handleViewBacktestRun}}),e("backtest-run-viewer",{attrs:{visible:t.showBacktestRunViewer,run:t.selectedBacktestRun},on:{cancel:function(e){t.showBacktestRunViewer=!1,t.selectedBacktestRun=null}}}),e("a-modal",{attrs:{title:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.editTitle"):t.$t("dashboard.indicator.publish.title"),visible:t.showPublishModal,confirmLoading:t.publishing,width:"500px",okText:t.publishIndicator&&t.publishIndicator.publish_to_community?t.$t("dashboard.indicator.publish.update"):t.$t("dashboard.indicator.publish.confirm"),cancelText:t.$t("common.cancel")},on:{ok:t.handleConfirmPublish,cancel:function(e){t.showPublishModal=!1,t.publishIndicator=null}}},[e("a-form-model",{ref:"publishForm",attrs:{model:t.publishForm,rules:t.publishRules,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.publish.hint")}}),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.pricingType"),prop:"pricingType"}},[e("a-radio-group",{model:{value:t.publishPricingType,callback:function(e){t.publishPricingType=e},expression:"publishPricingType"}},[e("a-radio",{attrs:{value:"free"}},[t._v(t._s(t.$t("dashboard.indicator.publish.free")))]),e("a-radio",{attrs:{value:"paid"}},[t._v(t._s(t.$t("dashboard.indicator.publish.paid")))])],1)],1),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.price"),prop:"price"}},[e("a-input-number",{staticStyle:{width:"200px"},attrs:{min:1,max:1e4,precision:0},model:{value:t.publishPrice,callback:function(e){t.publishPrice=e},expression:"publishPrice"}}),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("community.credits")))])],1):t._e(),"paid"===t.publishPricingType?e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.vipFree")}},[e("a-switch",{model:{value:t.publishVipFree,callback:function(e){t.publishVipFree=e},expression:"publishVipFree"}}),e("div",{staticStyle:{"margin-top":"6px",color:"rgba(0,0,0,0.45)","font-size":"12px"}},[t._v(" "+t._s(t.$t("dashboard.indicator.publish.vipFreeHint"))+" ")])],1):t._e(),e("a-form-model-item",{attrs:{label:t.$t("dashboard.indicator.publish.description"),prop:"description"}},[e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.publish.descriptionPlaceholder"),rows:4,maxLength:500},model:{value:t.publishDescription,callback:function(e){t.publishDescription=e},expression:"publishDescription"}})],1),t.publishIndicator&&t.publishIndicator.publish_to_community?e("div",{staticStyle:{"margin-top":"16px"}},[e("a-button",{attrs:{type:"danger",ghost:"",loading:t.unpublishing},on:{click:t.handleUnpublish}},[e("a-icon",{attrs:{type:"close-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.publish.unpublish"))+" ")],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[e("div",{staticClass:"add-stock-modal-content"},[e("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(e){t.selectedMarketTab=e},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(i){return e("a-tab-pane",{key:i.value,attrs:{tab:t.$t(i.i18nKey||"dashboard.analysis.market.".concat(i.value))}})}),1),e("div",{staticClass:"symbol-search-section"},[e("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(e){t.symbolSearchKeyword=e},expression:"symbolSearchKeyword"}},[e("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?e("div",{staticClass:"search-results-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),e("div",{staticClass:"hot-symbols-section"},[e("div",{staticClass:"section-title"},[e("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),e("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?e("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(i){return e("a-list-item",{staticClass:"symbol-list-item",on:{click:function(e){return t.selectSymbol(i)}}},[e("a-list-item-meta",[e("template",{slot:"title"},[e("div",{staticClass:"symbol-item-content"},[e("span",{staticClass:"symbol-code"},[t._v(t._s(i.symbol))]),e("span",{staticClass:"symbol-name"},[t._v(t._s(i.name))]),i.exchange?e("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(i.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):e("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?e("div",{staticClass:"selected-symbol-section"},[e("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(e){t.selectedSymbolForAdd=null}}},[e("template",{slot:"description"},[e("div",{staticClass:"selected-symbol-info"},[e("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),e("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?e("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):e("span",{staticStyle:{color:"#999","margin-left":"8px","font-style":"italic"}},[t._v(t._s(t.$t("dashboard.analysis.modal.addStock.nameWillBeFetched")))])],1)])],2)],1):t._e()],1)])],1),e("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentSymbol&&t.isCryptoMarket?e("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTrade}},[e("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),e("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:"indicator","market-type":"swap"},on:{close:function(e){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}})],1)},r=[],a=(i(62621),i(43898)),o=i(44735),s=i(15863),l=i(81127),c=i(56252),u=(i(6011),i(18787)),d=i(76338),h=(i(28706),i(2008),i(50113),i(48980),i(74423),i(48598),i(62062),i(54554),i(79432),i(26099),i(16034),i(38781),i(31415),i(21699),i(47764),i(42762),i(23500),i(62953),i(85471)),p=i(95353),f=i(75769),v=i(35038),g=i(505),m=function(){var t=this,e=t._self._c;return e("div",[e("a-modal",{staticClass:"indicator-editor-modal",style:t.isMobile?{top:0,paddingBottom:0}:{top:"2%"},attrs:{title:t.$t("dashboard.indicator.editor.title"),visible:t.visible,width:t.isMobile?"100%":"95vw",confirmLoading:t.saving,okText:t.$t("dashboard.indicator.editor.save"),cancelText:t.$t("dashboard.indicator.editor.cancel"),maskClosable:!1,centered:!1},on:{ok:t.handleSave,cancel:t.handleCancel,afterClose:t.handleAfterClose}},[e("div",{staticClass:"editor-content"},[e("a-row",{staticClass:"editor-layout",class:{"mobile-layout":t.isMobile},attrs:{gutter:16}},[e("a-col",{staticClass:"code-editor-column",attrs:{span:24,xs:24,sm:24,md:24}},[e("div",{staticClass:"code-section"},[e("div",{staticClass:"section-header"},[e("div",{staticClass:"header-left"},[e("span",{staticClass:"section-title"},[t._v(t._s(t.$t("dashboard.indicator.editor.code")))])]),e("div",{staticClass:"section-actions"},[e("a-button",{staticStyle:{padding:"0 8px",color:"#52c41a","font-weight":"bold"},attrs:{type:"link",size:"small",loading:t.verifying},on:{click:t.handleVerifyCode}},[e("a-icon",{attrs:{type:"check-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.verifyCode"))+" ")],1),e("a-button",{staticStyle:{padding:"0"},attrs:{type:"link",size:"small"},on:{click:t.goToDocs}},[e("a-icon",{attrs:{type:"book"}}),t._v(" "+t._s(t.$t("dashboard.indicator.editor.guide"))+" ")],1)],1)]),e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:t.$t("dashboard.indicator.boundary.message"),description:t.$t("dashboard.indicator.boundary.indicatorRule")}}),e("div",{staticClass:"code-mode-split"},[e("a-row",{staticClass:"code-mode-row",attrs:{gutter:16}},[e("a-col",{staticClass:"code-pane",attrs:{xs:24,sm:24,md:18}},[e("div",{ref:"codeEditorContainer",staticClass:"code-editor-container"})]),e("a-col",{staticClass:"ai-pane",attrs:{xs:24,sm:24,md:6}},[e("div",{staticClass:"ai-panel"},[e("div",{staticClass:"ai-panel-title"},[e("a-icon",{attrs:{type:"robot"}}),e("span",[t._v(t._s(t.$t("dashboard.indicator.editor.aiGenerate")))])],1),e("a-textarea",{attrs:{placeholder:t.$t("dashboard.indicator.editor.aiPromptPlaceholder"),rows:12,"auto-size":{minRows:12,maxRows:20}},model:{value:t.aiPrompt,callback:function(e){t.aiPrompt=e},expression:"aiPrompt"}}),e("a-button",{staticStyle:{"margin-top":"10px"},attrs:{type:"primary",block:"",loading:t.aiGenerating,size:"large"},on:{click:t.handleAIGenerate}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.aiGenerateBtn"))+" ")])],1)])],1)],1)],1)])],1)],1),e("div",{staticClass:"editor-footer",attrs:{slot:"footer"},slot:"footer"},[e("a-button",{on:{click:t.handleCancel}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.cancel"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.saving},on:{click:t.handleSave}},[t._v(" "+t._s(t.$t("dashboard.indicator.editor.save"))+" ")])],1)])],1)},y=[],b=i(57532),x=(i(2892),i(27495),i(99449),i(25440),i(11392),i(15237)),_=i.n(x),w=(i(74806),i(55218),i(97923),i(50436),i(74053)),C=i.n(w),S=i(75314),k={name:"IndicatorEditor",props:{visible:{type:Boolean,default:!1},indicator:{type:Object,default:null},userId:{type:Number,default:null}},data:function(){return{saving:!1,codeEditor:null,aiPrompt:"",aiGenerating:!1,verifying:!1,isMobile:!1}},computed:{},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){setTimeout(function(){!e.codeEditor&&e.$refs.codeEditorContainer&&e.initCodeEditor(),e.initFormData()},200)}):this.codeEditor&&this.codeEditor.refresh()},indicator:{handler:function(t){var e=this;t&&this.visible&&this.$nextTick(function(){setTimeout(function(){e.initFormData()},100)})},deep:!0}},mounted:function(){var t=this;this.checkMobile(),window.addEventListener("resize",this.checkMobile),this.visible&&this.$nextTick(function(){setTimeout(function(){t.initCodeEditor()},100)})},beforeDestroy:function(){if(window.removeEventListener("resize",this.checkMobile),this.codeEditor)try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var t=this.codeEditor.getWrapperElement();t&&t.parentNode&&t.parentNode.removeChild(t)}}catch(e){}finally{this.codeEditor=null}},methods:{getDefaultIndicatorCode:function(){return'#Demo Code:\n#my_indicator_name = "My Buy/Sell Indicator"\n#my_indicator_description = "Buy/Sell only; execution is normalized in backend."\n\n#df = df.copy()\n#sma = df["close"].rolling(14).mean()\n#buy = (df["close"] > sma) & (df["close"].shift(1) <= sma.shift(1))\n#sell = (df["close"] < sma) & (df["close"].shift(1) >= sma.shift(1))\n#df["buy"] = buy.fillna(False).astype(bool)\n#df["sell"] = sell.fillna(False).astype(bool)\n\n#buy_marks = [df["low"].iloc[i] * 0.995 if df["buy"].iloc[i] else None for i in range(len(df))]\n#sell_marks = [df["high"].iloc[i] * 1.005 if df["sell"].iloc[i] else None for i in range(len(df))]\n\n#output = {\n# "name": my_indicator_name,\n# "plots": [],\n# "signals": [\n# {"type": "buy", "text": "B", "data": buy_marks, "color": "#00E676"},\n# {"type": "sell", "text": "S", "data": sell_marks, "color": "#FF5252"}\n# ]\n#}\n'},checkMobile:function(){this.isMobile=window.innerWidth<=768},goToDocs:function(){window.open("https://github.com/brokermr810/QuantDinger/blob/main/docs/STRATEGY_DEV_GUIDE.md","_blank")},handleVerifyCode:function(){var t=this,e=this.codeEditor?this.codeEditor.getValue():"";e&&e.trim()?(this.verifying=!0,(0,f.Ay)({url:"/api/indicator/verifyCode",method:"post",data:{code:e}}).then(function(e){if(1===e.code){var i=e.data||{};t.$message.success("".concat(t.$t("dashboard.indicator.editor.verifyCodeSuccess")," (").concat(i.plots_count||0," plots, ").concat(i.signals_count||0," signals)"))}else{var n=e.data||{};t.$error({title:t.$t("dashboard.indicator.editor.verifyCodeFailed"),width:600,content:function(t){return t("div",[t("p",{style:{fontWeight:"bold",color:"#ff4d4f"}},e.msg),n.details?t("pre",{style:{background:"#f5f5f5",padding:"8px",overflow:"auto",maxHeight:"300px",marginTop:"8px",fontSize:"12px",fontFamily:"monospace"}},n.details):null])}})}}).catch(function(e){t.$message.error("Request Failed: "+(e.message||"Unknown Error"))}).finally(function(){t.verifying=!1})):this.$message.warning(this.$t("dashboard.indicator.editor.verifyCodeEmpty"))},cleanMarkdownCodeBlocks:function(t){if(!t||"string"!==typeof t)return t;var e=t.trim(),i=/```/.test(e);return i?(e=e.replace(/^```[\w]*\s*\n?/i,""),e.startsWith("```")&&(e=e.replace(/^```\s*\n?/g,"")),e.endsWith("```")&&(e=e.replace(/\n?```\s*$/g,"")),e=e.replace(/^\s*```[\w]*\s*$/gm,""),e=e.replace(/^\s*```\s*$/gm,""),e=e.replace(/\n{3,}/g,"\n\n"),e=e.trim(),e):e},initFormData:function(){var t=this;if(this.visible){var e=this.indicator&&this.indicator.code||"";e&&String(e).trim()||(e=this.getDefaultIndicatorCode()),this.$nextTick(function(){setTimeout(function(){t.aiPrompt="",t.codeEditor&&(t.codeEditor.setValue(e),t.codeEditor.refresh())},50)})}},initCodeEditor:function(){var t=this;if(this.$refs.codeEditorContainer){if(this.codeEditor){try{if("function"===typeof this.codeEditor.toTextArea)this.codeEditor.toTextArea();else if("function"===typeof this.codeEditor.getWrapperElement){var e=this.codeEditor.getWrapperElement();e&&e.parentNode&&e.parentNode.removeChild(e)}}catch(i){}this.codeEditor=null}try{this.$refs.codeEditorContainer.innerHTML="",this.codeEditor=_()(this.$refs.codeEditorContainer,{value:function(){var e=t.indicator&&t.indicator.code||"";return e&&String(e).trim()?e:t.getDefaultIndicatorCode()}(),mode:"python",theme:"eclipse",lineNumbers:!0,lineWrapping:!0,indentUnit:4,indentWithTabs:!1,smartIndent:!0,matchBrackets:!0,autoCloseBrackets:!0,styleActiveLine:!0,foldGutter:!1,gutters:["CodeMirror-linenumbers"],tabSize:4,viewportMargin:1/0}),this.codeEditor.on("change",function(t){t.getValue()}),this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()})}catch(n){}}},handleSave:function(){var t=this.codeEditor?this.codeEditor.getValue():"",e=t||"";e.trim()?(this.saving=!0,this.$emit("save",{id:this.indicator?this.indicator.id:0,code:e,userid:this.userId})):this.$message.warning(this.$t("dashboard.indicator.editor.codeRequired"))},handleCancel:function(){this.codeEditor&&this.codeEditor.setValue(""),this.$emit("cancel")},handleAfterClose:function(){var t=this;this.codeEditor&&this.$nextTick(function(){t.codeEditor&&t.codeEditor.refresh()}),this.aiPrompt=""},handleAIGenerate:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a,o,s,c,u,d,h,p,f,v,g,m,y,x,_,w,k,A,T,M,I,E;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.aiPrompt&&t.aiPrompt.trim()){e.n=1;break}return t.$message.warning(t.$t("dashboard.indicator.editor.aiPromptRequired")),e.a(2);case 1:return t.aiGenerating=!0,i="",t.codeEditor&&(i=t.codeEditor.getValue()||""),t.codeEditor&&(t.codeEditor.setValue("# AI generating...\n"),t.codeEditor.refresh()),n="",e.p=2,r="/api/indicator/aiGenerate",a=C().get(S.Xh),o={prompt:t.aiPrompt.trim()},i.trim()&&(o.existingCode=i.trim()),e.n=3,fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a?"Bearer ".concat(a):"","Access-Token":a||"",Token:a||""},body:JSON.stringify(o),credentials:"include"});case 3:if(s=e.v,s.ok){e.n=5;break}return e.n=4,s.text().catch(function(){return""});case 4:throw c=e.v,new Error(c||"HTTP error! status: ".concat(s.status));case 5:if(s.body&&"function"===typeof s.body.getReader){e.n=6;break}throw new Error("AI 服务未返回可读取的流(response.body 不存在)");case 6:u=s.body.getReader(),d=new TextDecoder,h="";case 7:return e.n=8,u.read();case 8:if(p=e.v,f=p.done,v=p.value,!f){e.n=9;break}return e.a(3,21);case 9:h+=d.decode(v,{stream:!0}),g=h.split("\n\n"),h=g.pop()||"",m=(0,b.A)(g),e.p=10,m.s();case 11:if((y=m.n()).done){e.n=17;break}if(x=y.value,x.trim()&&x.startsWith("data: ")){e.n=12;break}return e.a(3,16);case 12:if(_=x.substring(6),"[DONE]"!==_){e.n=13;break}return e.a(3,17);case 13:if(e.p=13,w=JSON.parse(_),!w.error){e.n=14;break}throw new Error(w.error);case 14:w.content&&(n+=w.content,k=t.cleanMarkdownCodeBlocks(n),t.codeEditor&&(t.codeEditor.setValue(k),A=t.codeEditor.lineCount(),t.codeEditor.setCursor({line:A-1,ch:0}),t.codeEditor.refresh())),e.n=16;break;case 15:e.p=15,e.v;case 16:e.n=11;break;case 17:e.n=19;break;case 18:e.p=18,I=e.v,m.e(I);case 19:return e.p=19,m.f(),e.f(19);case 20:e.n=7;break;case 21:t.codeEditor&&n?(T=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(T),t.codeEditor.refresh(),t.$message.success(t.$t("dashboard.indicator.editor.aiGenerateSuccess"))):n||t.$message.warning("未生成任何代码,请尝试更详细的提示词"),e.n=23;break;case 22:e.p=22,E=e.v,t.$message.error(E.message||t.$t("dashboard.indicator.editor.aiGenerateError")),n&&t.codeEditor&&(M=t.cleanMarkdownCodeBlocks(n),t.codeEditor.setValue(M));case 23:return e.p=23,t.aiGenerating=!1,e.f(23);case 24:return e.a(2)}},e,null,[[13,15],[10,18,19,20],[2,22,23,24]])}))()}}},A=k,T=i(845),M=(0,T.A)(A,m,y,!1,null,"4fea1865",null),I=M.exports,E=function(){var t=this,e=t._self._c;return e("div",{staticClass:"chart-left",class:{"theme-dark":"dark"===t.chartTheme}},[e("div",{staticClass:"chart-wrapper"},[e("div",{staticClass:"drawing-toolbar"},[t._l(t.drawingTools,function(i){return e("a-tooltip",{key:i.name,attrs:{title:i.title,placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",class:{active:t.activeDrawingTool===i.name},on:{click:function(e){return t.selectDrawingTool(i.name)}}},[e("a-icon",{attrs:{type:i.icon}})],1)])}),e("a-divider",{attrs:{type:"vertical"}}),e("a-tooltip",{attrs:{title:t.$t("dashboard.indicator.drawing.clearAll"),placement:"right"}},[e("div",{staticClass:"drawing-tool-btn",on:{click:t.clearAllDrawings}},[e("a-icon",{attrs:{type:"delete"}})],1)])],2),e("div",{staticClass:"chart-content-area"},[e("div",{staticClass:"indicator-toolbar"},t._l(t.indicatorButtons,function(i){return e("div",{key:i.id,staticClass:"indicator-btn",class:{active:t.isIndicatorActive(i.id)},attrs:{title:i.name},on:{click:function(e){return t.toggleIndicator(i)}}},[t._v(" "+t._s(i.shortName)+" ")])}),0),e("div",{staticClass:"kline-chart-container",attrs:{id:"kline-chart-container"}})]),t.loading?e("div",{staticClass:"chart-overlay"},[e("a-spin",{attrs:{size:"large"}},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#13c2c2"},attrs:{slot:"indicator",type:"loading",spin:""},slot:"indicator"})],1)],1):t._e(),t.error?e("div",{staticClass:"chart-overlay"},[e("div",{staticClass:"error-box"},[e("a-icon",{staticStyle:{"font-size":"24px",color:"#ef5350","margin-bottom":"10px"},attrs:{type:"warning"}}),e("span",[t._v(t._s(t.error))]),e("a-button",{staticStyle:{"margin-top":"12px"},attrs:{type:"primary",size:"small",ghost:""},on:{click:t.handleRetry}},[t._v(" "+t._s(t.$t("dashboard.indicator.retry"))+" ")])],1)]):t._e(),t.pyodideLoadFailed?e("div",{staticClass:"chart-overlay pyodide-warning"},[e("div",{staticClass:"warning-box"},[e("a-icon",{staticStyle:{"font-size":"32px",color:"#faad14","margin-bottom":"12px"},attrs:{type:"warning"}}),e("div",{staticClass:"warning-title"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailed")))]),e("div",{staticClass:"warning-desc"},[t._v(t._s(t.$t("dashboard.indicator.warning.pyodideLoadFailedDesc")))])],1)]):t._e(),t.symbol||t.loading||t.error||t.pyodideLoadFailed?t._e():e("div",{staticClass:"chart-overlay initial-hint"},[e("div",{staticClass:"hint-box"},[e("a-icon",{staticStyle:{"font-size":"48px",color:"#1890ff","margin-bottom":"16px"},attrs:{type:"line-chart"}}),e("div",{staticClass:"hint-title"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbol")))]),e("div",{staticClass:"hint-desc"},[t._v(t._s(t.$t("dashboard.indicator.hint.selectSymbolDesc")))])],1)])])])},D=[];i(2259);function P(t){if(null!=t){var e=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],i=0;if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&i>=t.length&&(t=void 0),{value:t&&t[i++],done:!t}}}}throw new TypeError((0,o.A)(t)+" is not iterable")}var L=i(26297),R=i(2403),F=(i(34782),i(26910),i(71761),function(t,e){return F=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])},F(t,e)});function B(t,e){if("function"!==typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function i(){this.constructor=t}F(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}var N,O,z,W,V,$,H,K,Y,X=function(){return X=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!r||s[1]>r[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function q(t,e){var i="function"===typeof Symbol&&t[Symbol.iterator];if(!i)return t;var n,r,a=i.call(t),o=[];try{while((void 0===e||e-- >0)&&!(n=a.next()).done)o.push(n.value)}catch(s){r={error:s}}finally{try{n&&!n.done&&(i=a["return"])&&i.call(a)}finally{if(r)throw r.error}}return o}function Z(t,e,i){if(i||2===arguments.length)for(var n,r=0,a=e.length;r1e9)return"".concat(+(e/1e9).toFixed(3),"B");if(e>1e6)return"".concat(+(e/1e6).toFixed(3),"M");if(e>1e3)return"".concat(+(e/1e3).toFixed(3),"K")}return"".concat(t)}function zt(t,e){var i="".concat(t);if(0===e.length)return i;if(i.includes(".")){var n=i.split(".");return"".concat(n[0].replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)}),".").concat(n[1])}return i.replace(/(\d)(?=(\d{3})+$)/g,function(t){return"".concat(t).concat(e)})}function Wt(t,e){var i="".concat(t),n=new RegExp("\\.0{"+e+",}[1-9][0-9]*$");if(n.test(i)){var r=i.split("."),a=r[r.length-1],o=a.match(/0*/);if(Mt(o)){var s=o[0].length;return r[r.length-1]=a.replace(/0*/,"0{".concat(s,"}")),r.join(".")}}return i}function Vt(t){var e,i,n;return null!==(n=null===(i=null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||void 0===i?void 0:i.devicePixelRatio)&&void 0!==n?n:1}function $t(t,e,i){return"".concat(null!==e&&void 0!==e?e:"normal"," ").concat(null!==t&&void 0!==t?t:12,"px ").concat(null!==i&&void 0!==i?i:"Helvetica Neue")}function Ht(t,e,i,n){if(!Mt(Dt)){var r=document.createElement("canvas"),a=Vt(r);Dt=r.getContext("2d"),Dt.scale(a,a)}return Dt.font=$t(e,i,n),Math.round(Dt.measureText(t).width)}(function(t){t["OnDataReady"]="onDataReady",t["OnZoom"]="onZoom",t["OnScroll"]="onScroll",t["OnVisibleRangeChange"]="onVisibleRangeChange",t["OnTooltipIconClick"]="onTooltipIconClick",t["OnCrosshairChange"]="onCrosshairChange",t["OnCandleBarClick"]="onCandleBarClick",t["OnPaneDrag"]="onPaneDrag"})(Pt||(Pt={}));var Kt,Yt,Xt=function(){function t(){this._callbacks=[]}return t.prototype.subscribe=function(t){var e,i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i<0&&this._callbacks.push(t)},t.prototype.unsubscribe=function(t){var e;if(kt(t)){var i=null!==(e=this._callbacks.indexOf(t))&&void 0!==e?e:-1;i>-1&&this._callbacks.splice(i,1)}else this._callbacks=[]},t.prototype.execute=function(t){this._callbacks.forEach(function(e){e(t)})},t.prototype.isEmpty=function(){return 0===this._callbacks.length},t}();function Ut(t,e,i,n,r){var a,o=e.result,s=e.figures,l=e.styles,c=Ft(l,"circles",n.circles),u=c.length,d=Ft(l,"bars",n.bars),h=d.length,p=Ft(l,"lines",n.lines),f=p.length,v=0,g=0,m=0,y=0;s.forEach(function(s){var l;switch(s.type){case"circle":y=v;var b=c[v%u];a=X(X({},b),{color:b.noChangeColor}),v++;break;case"bar":y=g;var x=d[g%h];a=X(X({},x),{color:x.noChangeColor}),g++;break;case"line":y=m,a=p[m%f],m++;break}if(Mt(a)){var _={prev:{kLineData:t[i-1],indicatorData:o[i-1]},current:{kLineData:t[i],indicatorData:o[i]},next:{kLineData:t[i+1],indicatorData:o[i+1]}},w=null===(l=s.styles)||void 0===l?void 0:l.call(s,_,e,n);r(s,X(X({},a),w),y)}})}(function(t){t["Init"]="init",t["Forward"]="forward",t["Backward"]="backward"})(Kt||(Kt={})),function(t){t["Normal"]="normal",t["Price"]="price",t["Volume"]="volume"}(Yt||(Yt={}));var Gt,jt=function(){function t(t){this.result=[],this._precisionFlag=!1;var e=t.name,i=t.shortName,n=t.series,r=t.calcParams,a=t.figures,o=t.precision,s=t.shouldOhlc,l=t.shouldFormatBigNumber,c=t.visible,u=t.zLevel,d=t.minValue,h=t.maxValue,p=t.styles,f=t.extendData,v=t.regenerateFigures,g=t.createTooltipDataSource,m=t.draw;this.name=e,this.shortName=null!==i&&void 0!==i?i:e,this.series=null!==n&&void 0!==n?n:Yt.Normal,this.precision=null!==o&&void 0!==o?o:4,this.calcParams=null!==r&&void 0!==r?r:[],this.figures=null!==a&&void 0!==a?a:[],this.shouldOhlc=null!==s&&void 0!==s&&s,this.shouldFormatBigNumber=null!==l&&void 0!==l&&l,this.visible=null===c||void 0===c||c,this.zLevel=null!==u&&void 0!==u?u:0,this.minValue=null!==d&&void 0!==d?d:null,this.maxValue=null!==h&&void 0!==h?h:null,this.styles=Ct(null!==p&&void 0!==p?p:{}),this.extendData=f,this.regenerateFigures=null!==v&&void 0!==v?v:null,this.createTooltipDataSource=null!==g&&void 0!==g?g:null,this.draw=null!==m&&void 0!==m?m:null}return t.prototype.setShortName=function(t){return this.shortName!==t&&(this.shortName=t,!0)},t.prototype.setSeries=function(t){return this.series!==t&&(this.series=t,!0)},t.prototype.setPrecision=function(t,e){var i=null!==e&&void 0!==e&&e,n=Math.floor(t);return!(!(n!==this.precision&&t>=0)||i&&(!i||this._precisionFlag))&&(this.precision=n,i||(this._precisionFlag=!0),!0)},t.prototype.setCalcParams=function(t){var e,i;return this.calcParams=t,this.figures=null!==(i=null===(e=this.regenerateFigures)||void 0===e?void 0:e.call(this,t))&&void 0!==i?i:this.figures,!0},t.prototype.setShouldOhlc=function(t){return this.shouldOhlc!==t&&(this.shouldOhlc=t,!0)},t.prototype.setShouldFormatBigNumber=function(t){return this.shouldFormatBigNumber!==t&&(this.shouldFormatBigNumber=t,!0)},t.prototype.setVisible=function(t){return this.visible!==t&&(this.visible=t,!0)},t.prototype.setZLevel=function(t){return this.zLevel!==t&&(this.zLevel=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setExtendData=function(t){return this.extendData!==t&&(this.extendData=t,!0)},t.prototype.setFigures=function(t){return this.figures!==t&&(this.figures=t,!0)},t.prototype.setMinValue=function(t){return this.minValue!==t&&(this.minValue=t,!0)},t.prototype.setMaxValue=function(t){return this.maxValue!==t&&(this.maxValue=t,!0)},t.prototype.setRegenerateFigures=function(t){return this.regenerateFigures!==t&&(this.regenerateFigures=t,!0)},t.prototype.setCreateTooltipDataSource=function(t){return this.createTooltipDataSource!==t&&(this.createTooltipDataSource=t,!0)},t.prototype.setDraw=function(t){return this.draw!==t&&(this.draw=t,!0)},t.prototype.calcIndicator=function(t){return U(this,void 0,void 0,function(){var e;return G(this,function(i){switch(i.label){case 0:return i.trys.push([0,2,,3]),[4,this.calc(t,this)];case 1:return e=i.sent(),this.result=e,[2,!0];case 2:return i.sent(),[2,!1];case 3:return[2]}})})},t.extend=function(e){var i=function(t){function i(){return t.call(this,e)||this}return B(i,t),i.prototype.calc=function(t,i){return e.calc(t,i)},i}(t);return i},t}();function qt(){return["mouseClickEvent","mouseDoubleClickEvent","mouseRightClickEvent","tapEvent","doubleTapEvent","mouseDownEvent","touchStartEvent","mouseMoveEvent","touchMoveEvent"]}(function(t){t["Normal"]="normal",t["WeakMagnet"]="weak_magnet",t["StrongMagnet"]="strong_magnet"})(Gt||(Gt={}));var Zt,Jt=1,Qt=-1,te="overlay_",ee="overlay_figure_",ie=function(){function t(t){this.currentStep=Jt,this.points=[],this._prevPressedPoint=null,this._prevPressedPoints=[];var e=t.mode,i=t.modeSensitivity,n=t.extendData,r=t.styles,a=t.name,o=t.totalStep,s=t.lock,l=t.visible,c=t.zLevel,u=t.needDefaultPointFigure,d=t.needDefaultXAxisFigure,h=t.needDefaultYAxisFigure,p=t.createPointFigures,f=t.createXAxisFigures,v=t.createYAxisFigures,g=t.performEventPressedMove,m=t.performEventMoveForDrawing,y=t.onDrawStart,b=t.onDrawing,x=t.onDrawEnd,_=t.onClick,w=t.onDoubleClick,C=t.onRightClick,S=t.onPressedMoveStart,k=t.onPressedMoving,A=t.onPressedMoveEnd,T=t.onMouseEnter,M=t.onMouseLeave,I=t.onRemoved,E=t.onSelected,D=t.onDeselected;this.name=a,this.totalStep=!Tt(o)||o<2?1:o,this.lock=null!==s&&void 0!==s&&s,this.visible=null===l||void 0===l||l,this.zLevel=null!==c&&void 0!==c?c:0,this.needDefaultPointFigure=null!==u&&void 0!==u&&u,this.needDefaultXAxisFigure=null!==d&&void 0!==d&&d,this.needDefaultYAxisFigure=null!==h&&void 0!==h&&h,this.mode=null!==e&&void 0!==e?e:Gt.Normal,this.modeSensitivity=null!==i&&void 0!==i?i:8,this.extendData=n,this.styles=Ct(null!==r&&void 0!==r?r:{}),this.createPointFigures=null!==p&&void 0!==p?p:null,this.createXAxisFigures=null!==f&&void 0!==f?f:null,this.createYAxisFigures=null!==v&&void 0!==v?v:null,this.performEventPressedMove=null!==g&&void 0!==g?g:null,this.performEventMoveForDrawing=null!==m&&void 0!==m?m:null,this.onDrawStart=null!==y&&void 0!==y?y:null,this.onDrawing=null!==b&&void 0!==b?b:null,this.onDrawEnd=null!==x&&void 0!==x?x:null,this.onClick=null!==_&&void 0!==_?_:null,this.onDoubleClick=null!==w&&void 0!==w?w:null,this.onRightClick=null!==C&&void 0!==C?C:null,this.onPressedMoveStart=null!==S&&void 0!==S?S:null,this.onPressedMoving=null!==k&&void 0!==k?k:null,this.onPressedMoveEnd=null!==A&&void 0!==A?A:null,this.onMouseEnter=null!==T&&void 0!==T?T:null,this.onMouseLeave=null!==M&&void 0!==M?M:null,this.onRemoved=null!==I&&void 0!==I?I:null,this.onSelected=null!==E&&void 0!==E?E:null,this.onDeselected=null!==D&&void 0!==D?D:null}return t.prototype.setId=function(t){return!Et(this.id)&&(this.id=t,!0)},t.prototype.setGroupId=function(t){return!Et(this.groupId)&&(this.groupId=t,!0)},t.prototype.setPaneId=function(t){this.paneId=t},t.prototype.setExtendData=function(t){return t!==this.extendData&&(this.extendData=t,!0)},t.prototype.setStyles=function(t){return wt(this.styles,t),!0},t.prototype.setPoints=function(t){if(t.length>0){var e=void 0;if(this.points=Z([],q(t),!1),t.length>=this.totalStep-1?(this.currentStep=Qt,e=this.totalStep-1):(this.currentStep=t.length+1,e=t.length),null!==this.performEventMoveForDrawing)for(var i=0;is?n=a:r=a,o<=2)break}return n}function fe(t){var e=Math.floor(ye(t)),i=be(e),n=t/i,r=0;return r=n<1.5?1:n<2.5?2:n<3.5?3:n<4.5?4:n<5.5?5:n<6.5?6:8,t=r*i,e>=-20?+t.toFixed(e<0?-e:0):t}function ve(t,e){null==e&&(e=10),e=Math.min(Math.max(0,e),20);var i=(+t).toFixed(e);return+i}function ge(t){var e=t.toString(),i=e.indexOf("e");if(i>0){var n=+e.slice(i+1);return n<0?-n:0}var r=e.indexOf(".");return r<0?0:e.length-1-r}function me(t,e,i){var n=[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER];return t.forEach(function(t){var r,a;n[0]=Math.max(null!==(r=t[e])&&void 0!==r?r:t,n[0]),n[1]=Math.min(null!==(a=t[i])&&void 0!==a?a:t,n[1])}),n}function ye(t){return Math.log(t)/Math.log(10)}function be(t){return Math.pow(10,t)}function xe(){return{from:0,to:0,realFrom:0,realTo:0}}var _e={MIN:1,MAX:50},we=8,Ce=80,Se=.88,ke=10,Ae=function(){function t(t){this._dateTimeFormat=this._buildDateTimeFormat(),this._zoomEnabled=!0,this._scrollEnabled=!0,this._totalBarSpace=0,this._barSpace=we,this._offsetRightDistance=Ce,this._startLastBarRightSideDiffBarCount=0,this._scrollLimitRole=0,this._minVisibleBarCount={left:2,right:2},this._maxOffsetDistance={left:50,right:50},this._visibleRange=xe(),this._chartStore=t,this._gapBarSpace=this._calcGapBarSpace(),this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace}return t.prototype._calcGapBarSpace=function(){var t;return this._barSpace>3?t=Math.floor(this._barSpace*Se):(t=Math.floor(this._barSpace),t===this._barSpace&&t--),t%2===0&&t--,t=Math.max(1,t),t},t.prototype.adjustVisibleRange=function(){var t,e,i,n,r=this._chartStore.getDataList(),a=r.length,o=this._totalBarSpace/this._barSpace;1===this._scrollLimitRole?(i=(this._totalBarSpace-this._maxOffsetDistance.right)/this._barSpace,n=(this._totalBarSpace-this._maxOffsetDistance.left)/this._barSpace):(i=this._minVisibleBarCount.left,n=this._minVisibleBarCount.right),i=Math.max(0,i),n=Math.max(0,n);var s=o-Math.min(i,a);this._lastBarRightSideDiffBarCount>s&&(this._lastBarRightSideDiffBarCount=s);var l=-a+Math.min(n,a);this._lastBarRightSideDiffBarCounta&&(c=a);var d=Math.round(c-o)-1;d<0&&(d=0);var h=this._lastBarRightSideDiffBarCount>0?Math.round(a+this._lastBarRightSideDiffBarCount-o)-1:d;if(this._visibleRange={from:d,to:c,realFrom:h,realTo:u},this._chartStore.getActionStore().execute(Pt.OnVisibleRangeChange,this._visibleRange),this._chartStore.adjustVisibleDataList(),0===d){var p=r[0];this._chartStore.executeLoadMoreCallback(null!==(t=null===p||void 0===p?void 0:p.timestamp)&&void 0!==t?t:null),this._chartStore.executeLoadDataCallback({type:Kt.Forward,data:null!==p&&void 0!==p?p:null})}c===a&&this._chartStore.executeLoadDataCallback({type:Kt.Backward,data:null!==(e=r[a-1])&&void 0!==e?e:null})},t.prototype.getDateTimeFormat=function(){return this._dateTimeFormat},t.prototype._buildDateTimeFormat=function(t){var e={hour12:!1,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"};Et(t)&&(e.timeZone=t);var i=null;try{i=new Intl.DateTimeFormat("en",e)}catch(n){bt("","","Timezone is error!!!")}return i},t.prototype.setTimezone=function(t){var e=this._buildDateTimeFormat(t);null!==e&&(this._dateTimeFormat=e)},t.prototype.getTimezone=function(){return this._dateTimeFormat.resolvedOptions().timeZone},t.prototype.getBarSpace=function(){return{bar:this._barSpace,halfBar:this._barSpace/2,gapBar:this._gapBarSpace,halfGapBar:Math.floor(this._gapBarSpace/2)}},t.prototype.setBarSpace=function(t,e){t<_e.MIN||t>_e.MAX||this._barSpace===t||(this._barSpace=t,this._gapBarSpace=this._calcGapBarSpace(),null===e||void 0===e||e(),this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0))},t.prototype.setTotalBarSpace=function(t){return this._totalBarSpace!==t&&(this._totalBarSpace=t,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0)),this},t.prototype.setOffsetRightDistance=function(t,e){return this._offsetRightDistance=1===this._scrollLimitRole?Math.min(this._maxOffsetDistance.right,t):t,this._lastBarRightSideDiffBarCount=this._offsetRightDistance/this._barSpace,null!==e&&void 0!==e&&e&&(this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0)),this},t.prototype.resetOffsetRightDistance=function(){this.setOffsetRightDistance(this._offsetRightDistance)},t.prototype.getInitialOffsetRightDistance=function(){return this._offsetRightDistance},t.prototype.getOffsetRightDistance=function(){return Math.max(0,this._lastBarRightSideDiffBarCount*this._barSpace)},t.prototype.getLastBarRightSideDiffBarCount=function(){return this._lastBarRightSideDiffBarCount},t.prototype.setLastBarRightSideDiffBarCount=function(t){return this._lastBarRightSideDiffBarCount=t,this},t.prototype.setMaxOffsetLeftDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.left=t,this},t.prototype.setMaxOffsetRightDistance=function(t){return this._scrollLimitRole=1,this._maxOffsetDistance.right=t,this},t.prototype.setLeftMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.left=t,this},t.prototype.setRightMinVisibleBarCount=function(t){return this._scrollLimitRole=0,this._minVisibleBarCount.right=t,this},t.prototype.getVisibleRange=function(){return this._visibleRange},t.prototype.startScroll=function(){this._startLastBarRightSideDiffBarCount=this._lastBarRightSideDiffBarCount},t.prototype.scroll=function(t){if(this._scrollEnabled){var e=t/this._barSpace,i=this._lastBarRightSideDiffBarCount*this._barSpace;this._lastBarRightSideDiffBarCount=this._startLastBarRightSideDiffBarCount-e,this.adjustVisibleRange(),this._chartStore.getTooltipStore().recalculateCrosshair(!0),this._chartStore.getChart().adjustPaneViewport(!1,!0,!0,!0);var n=Math.round(i-this._lastBarRightSideDiffBarCount*this._barSpace);0!==n&&this._chartStore.getActionStore().execute(Pt.OnScroll,{distance:n})}},t.prototype.getDataByDataIndex=function(t){var e;return null!==(e=this._chartStore.getDataList()[t])&&void 0!==e?e:null},t.prototype.coordinateToFloatIndex=function(t){var e=this._chartStore.getDataList().length,i=(this._totalBarSpace-t)/this._barSpace,n=e+this._lastBarRightSideDiffBarCount-i;return Math.round(1e6*n)/1e6},t.prototype.dataIndexToTimestamp=function(t){var e,i=this.getDataByDataIndex(t);return null!==(e=null===i||void 0===i?void 0:i.timestamp)&&void 0!==e?e:null},t.prototype.timestampToDataIndex=function(t){var e=this._chartStore.getDataList();return 0===e.length?0:pe(e,"timestamp",t)},t.prototype.dataIndexToCoordinate=function(t){var e=this._chartStore.getDataList().length,i=e+this._lastBarRightSideDiffBarCount-t;return Math.floor(this._totalBarSpace-(i-.5)*this._barSpace)},t.prototype.coordinateToDataIndex=function(t){return Math.ceil(this.coordinateToFloatIndex(t))-1},t.prototype.zoom=function(t,e){var i,n=this;if(this._zoomEnabled){var r=null!==e&&void 0!==e?e:null;if(!Tt(null===r||void 0===r?void 0:r.x)){var a=this._chartStore.getTooltipStore().getCrosshair();r={x:null!==(i=null===a||void 0===a?void 0:a.x)&&void 0!==i?i:this._totalBarSpace/2}}var o=r.x,s=this.coordinateToFloatIndex(o),l=this._barSpace,c=this._barSpace+t*(this._barSpace/ke);this.setBarSpace(c,function(){n._lastBarRightSideDiffBarCount+=s-n.coordinateToFloatIndex(o)});var u=this._barSpace/l;1!==u&&this._chartStore.getActionStore().execute(Pt.OnZoom,{scale:u})}},t.prototype.setZoomEnabled=function(t){return this._zoomEnabled=t,this},t.prototype.getZoomEnabled=function(){return this._zoomEnabled},t.prototype.setScrollEnabled=function(t){return this._scrollEnabled=t,this},t.prototype.getScrollEnabled=function(){return this._scrollEnabled},t.prototype.clear=function(){this._visibleRange=xe()},t}(),Te={name:"AVP",shortName:"AVP",series:Yt.Price,precision:2,figures:[{key:"avp",title:"AVP: ",type:"line"}],calc:function(t){var e=0,i=0;return t.map(function(t){var n,r,a={},o=null!==(n=null===t||void 0===t?void 0:t.turnover)&&void 0!==n?n:0,s=null!==(r=null===t||void 0===t?void 0:t.volume)&&void 0!==r?r:0;return e+=o,i+=s,0!==i&&(a.avp=e/i),a})}},Me={name:"AO",shortName:"AO",calcParams:[5,34],figures:[{key:"ao",title:"AO: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.ao)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.ao)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>u?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):Ft(e.styles,"bars[0].downColor",i.bars[0].downColor);var h=d>u?O.Stroke:O.Fill;return{color:s,style:h,borderColor:s}}}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=0;return t.map(function(e,l){var c={},u=(e.low+e.high)/2;if(r+=u,a+=u,l>=i[0]-1){o=r/i[0];var d=t[l-(i[0]-1)];r-=(d.low+d.high)/2}if(l>=i[1]-1){s=a/i[1];d=t[l-(i[1]-1)];a-=(d.low+d.high)/2}return l>=n-1&&(c.ao=o-s),c})}},Ie={name:"BIAS",shortName:"BIAS",calcParams:[6,12,24],figures:[{key:"bias1",title:"BIAS6: ",type:"line"},{key:"bias2",title:"BIAS12: ",type:"line"},{key:"bias3",title:"BIAS24: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"bias".concat(e+1),title:"BIAS".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,l){var c;if(r[l]=(null!==(c=r[l])&&void 0!==c?c:0)+s,a>=e-1){var u=r[l]/i[l];o[n[l].key]=(s-u)/u*100,r[l]-=t[a-(e-1)].close}}),o})}};function Ee(t,e){var i=t.length,n=0;return t.forEach(function(t){var i=t.close-e;n+=i*i}),n=Math.abs(n),Math.sqrt(n/i)}var De={name:"BOLL",shortName:"BOLL",series:Yt.Price,calcParams:[20,2],precision:2,shouldOhlc:!0,figures:[{key:"up",title:"UP: ",type:"line"},{key:"mid",title:"MID: ",type:"line"},{key:"dn",title:"DN: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0;return t.map(function(e,a){var o=e.close,s={};if(r+=o,a>=n){s.mid=r/i[0];var l=Ee(t.slice(a-n,a+1),s.mid);s.up=s.mid+i[1]*l,s.dn=s.mid-i[1]*l,r-=t[a-n].close}return s})}},Pe={name:"BRAR",shortName:"BRAR",calcParams:[26],figures:[{key:"br",title:"BR: ",type:"line"},{key:"ar",title:"AR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0;return t.map(function(e,s){var l,c,u={},d=e.high,h=e.low,p=e.open,f=(null!==(l=t[s-1])&&void 0!==l?l:e).close;if(a+=d-p,o+=p-h,n+=d-f,r+=f-h,s>=i[0]-1){u.ar=0!==o?a/o*100:0,u.br=0!==r?n/r*100:0;var v=t[s-(i[0]-1)],g=v.high,m=v.low,y=v.open,b=(null!==(c=t[s-i[0]])&&void 0!==c?c:t[s-(i[0]-1)]).close;n-=g-b,r-=b-m,a-=g-y,o-=y-m}return u})}},Le={name:"BBI",shortName:"BBI",series:Yt.Price,precision:2,calcParams:[3,6,12,24],shouldOhlc:!0,figures:[{key:"bbi",title:"BBI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max.apply(Math,Z([],q(i),!1)),r=[],a=[];return t.map(function(e,o){var s={},l=e.close;if(i.forEach(function(e,i){var n;r[i]=(null!==(n=r[i])&&void 0!==n?n:0)+l,o>=e-1&&(a[i]=r[i]/e,r[i]-=t[o-(e-1)].close)}),o>=n-1){var c=0;a.forEach(function(t){c+=t}),s.bbi=c/4}return s})}},Re={name:"CCI",shortName:"CCI",calcParams:[20],figures:[{key:"cci",title:"CCI: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=i[0]-1,r=0,a=[];return t.map(function(e,o){var s={},l=(e.high+e.low+e.close)/3;if(r+=l,a.push(l),o>=n){var c=r/i[0],u=a.slice(o-n,o+1),d=0;u.forEach(function(t){d+=Math.abs(t-c)});var h=d/i[0];s.cci=0!==h?(l-c)/h/.015:0;var p=(t[o-n].high+t[o-n].low+t[o-n].close)/3;r-=p}return s})}},Fe={name:"CR",shortName:"CR",calcParams:[26,10,20,40,60],figures:[{key:"cr",title:"CR: ",type:"line"},{key:"ma1",title:"MA1: ",type:"line"},{key:"ma2",title:"MA2: ",type:"line"},{key:"ma3",title:"MA3: ",type:"line"},{key:"ma4",title:"MA4: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.ceil(i[1]/2.5+1),r=Math.ceil(i[2]/2.5+1),a=Math.ceil(i[3]/2.5+1),o=Math.ceil(i[4]/2.5+1),s=0,l=[],c=0,u=[],d=0,h=[],p=0,f=[],v=[];return t.forEach(function(e,g){var m,y,b,x,_,w={},C=null!==(m=t[g-1])&&void 0!==m?m:e,S=(C.high+C.close+C.low+C.open)/4,k=Math.max(0,e.high-S),A=Math.max(0,S-e.low);g>=i[0]-1&&(w.cr=0!==A?k/A*100:0,s+=w.cr,c+=w.cr,d+=w.cr,p+=w.cr,g>=i[0]+i[1]-2&&(l.push(s/i[1]),g>=i[0]+i[1]+n-3&&(w.ma1=l[l.length-1-n]),s-=null!==(y=v[g-(i[1]-1)].cr)&&void 0!==y?y:0),g>=i[0]+i[2]-2&&(u.push(c/i[2]),g>=i[0]+i[2]+r-3&&(w.ma2=u[u.length-1-r]),c-=null!==(b=v[g-(i[2]-1)].cr)&&void 0!==b?b:0),g>=i[0]+i[3]-2&&(h.push(d/i[3]),g>=i[0]+i[3]+a-3&&(w.ma3=h[h.length-1-a]),d-=null!==(x=v[g-(i[3]-1)].cr)&&void 0!==x?x:0),g>=i[0]+i[4]-2&&(f.push(p/i[4]),g>=i[0]+i[4]+o-3&&(w.ma4=f[f.length-1-o]),p-=null!==(_=v[g-(i[4]-1)].cr)&&void 0!==_?_:0)),v.push(w)}),v}},Be={name:"DMA",shortName:"DMA",calcParams:[10,50,10],figures:[{key:"dma",title:"DMA: ",type:"line"},{key:"ama",title:"AMA: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=Math.max(i[0],i[1]),r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u={},d=e.close;r+=d,a+=d;var h=0,p=0;if(l>=i[0]-1&&(h=r/i[0],r-=t[l-(i[0]-1)].close),l>=i[1]-1&&(p=a/i[1],a-=t[l-(i[1]-1)].close),l>=n-1){var f=h-p;u.dma=f,o+=f,l>=n+i[2]-2&&(u.ama=o/i[2],o-=null!==(c=s[l-(i[2]-1)].dma)&&void 0!==c?c:0)}s.push(u)}),s}},Ne={name:"DMI",shortName:"DMI",calcParams:[14,6],figures:[{key:"pdi",title:"PDI: ",type:"line"},{key:"mdi",title:"MDI: ",type:"line"},{key:"adx",title:"ADX: ",type:"line"},{key:"adxr",title:"ADXR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=0,l=0,c=0,u=0,d=[];return t.forEach(function(e,h){var p,f,v={},g=null!==(p=t[h-1])&&void 0!==p?p:e,m=g.close,y=e.high,b=e.low,x=y-b,_=Math.abs(y-m),w=Math.abs(m-b),C=y-g.high,S=g.low-b,k=Math.max(Math.max(x,_),w),A=C>0&&C>S?C:0,T=S>0&&S>C?S:0;if(n+=k,r+=A,a+=T,h>=i[0]-1){h>i[0]-1?(o=o-o/i[0]+k,s=s-s/i[0]+A,l=l-l/i[0]+T):(o=n,s=r,l=a);var M=0,I=0;0!==o&&(M=100*s/o,I=100*l/o),v.pdi=M,v.mdi=I;var E=0;I+M!==0&&(E=Math.abs(I-M)/(I+M)*100),c+=E,h>=2*i[0]-2&&(u=h>2*i[0]-2?(u*(i[0]-1)+E)/i[0]:c/i[0],v.adx=u,h>=2*i[0]+i[1]-3&&(v.adxr=((null!==(f=d[h-(i[1]-1)].adx)&&void 0!==f?f:0)+u)/2))}d.push(v)}),d}},Oe={name:"EMV",shortName:"EMV",calcParams:[14,9],figures:[{key:"emv",title:"EMV: ",type:"line"},{key:"maEmv",title:"MAEMV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.map(function(e,a){var o,s={};if(a>0){var l=t[a-1],c=e.high,u=e.low,d=null!==(o=e.volume)&&void 0!==o?o:0,h=(c+u)/2-(l.high+l.low)/2;if(0===d||c-u===0)s.emv=0;else{var p=d/1e8/(c-u);s.emv=h/p}n+=s.emv,r.push(s.emv),a>=i[0]&&(s.maEmv=n/i[0],n-=r[a-i[0]])}return s})}},ze={name:"EMA",shortName:"EMA",series:Yt.Price,calcParams:[6,12,20],precision:2,shouldOhlc:!0,figures:[{key:"ema1",title:"EMA6: ",type:"line"},{key:"ema2",title:"EMA12: ",type:"line"},{key:"ema3",title:"EMA20: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ema".concat(e+1),title:"EMA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=0,a=[];return t.map(function(t,e){var o={},s=t.close;return r+=s,i.forEach(function(t,i){e>=t-1&&(a[i]=e>t-1?(2*s+(t-1)*a[i])/(t+1):r/t,o[n[i].key]=a[i])}),o})}},We={name:"MTM",shortName:"MTM",calcParams:[12,6],figures:[{key:"mtm",title:"MTM: ",type:"line"},{key:"maMtm",title:"MAMTM: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=[];return t.forEach(function(e,a){var o,s={};if(a>=i[0]){var l=e.close,c=t[a-i[0]].close;s.mtm=l-c,n+=s.mtm,a>=i[0]+i[1]-1&&(s.maMtm=n/i[1],n-=null!==(o=r[a-(i[1]-1)].mtm)&&void 0!==o?o:0)}r.push(s)}),r}},Ve={name:"MA",shortName:"MA",series:Yt.Price,calcParams:[5,10,30,60],precision:2,shouldOhlc:!0,figures:[{key:"ma5",title:"MA5: ",type:"line"},{key:"ma10",title:"MA10: ",type:"line"},{key:"ma30",title:"MA30: ",type:"line"},{key:"ma60",title:"MA60: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){return{key:"ma".concat(e+1),title:"MA".concat(t,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[];return t.map(function(e,a){var o={},s=e.close;return i.forEach(function(e,i){var l;r[i]=(null!==(l=r[i])&&void 0!==l?l:0)+s,a>=e-1&&(o[n[i].key]=r[i]/e,r[i]-=t[a-(e-1)].close)}),o})}},$e={name:"MACD",shortName:"MACD",calcParams:[12,26,9],figures:[{key:"dif",title:"DIF: ",type:"line"},{key:"dea",title:"DEA: ",type:"line"},{key:"macd",title:"MACD: ",type:"bar",baseValue:0,styles:function(t,e,i){var n,r,a,o,s,l=t.prev,c=t.current,u=null!==(r=null===(n=l.indicatorData)||void 0===n?void 0:n.macd)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,d=null!==(o=null===(a=c.indicatorData)||void 0===a?void 0:a.macd)&&void 0!==o?o:Number.MIN_SAFE_INTEGER;s=d>0?Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):d<0?Ft(e.styles,"bars[0].downColor",i.bars[0].downColor):Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);var h=u=r[0]-1&&(i=e>r[0]-1?(2*d+(r[0]-1)*i)/(r[0]+1):a/r[0]),e>=r[1]-1&&(n=e>r[1]-1?(2*d+(r[1]-1)*n)/(r[1]+1):a/r[1]),e>=c-1&&(o=i-n,u.dif=o,s+=o,e>=c+r[2]-2&&(l=e>c+r[2]-2?(2*o+l*(r[2]-1))/(r[2]+1):s/r[2],u.macd=2*(o-l),u.dea=l)),u})}},He={name:"OBV",shortName:"OBV",calcParams:[30],figures:[{key:"obv",title:"OBV: ",type:"line"},{key:"maObv",title:"MAOBV: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[];return t.forEach(function(e,o){var s,l,c,u,d=null!==(s=t[o-1])&&void 0!==s?s:e;e.closed.close&&(r+=null!==(c=e.volume)&&void 0!==c?c:0);var h={obv:r};n+=r,o>=i[0]-1&&(h.maObv=n/i[0],n-=null!==(u=a[o-(i[0]-1)].obv)&&void 0!==u?u:0),a.push(h)}),a}},Ke={name:"PVT",shortName:"PVT",figures:[{key:"pvt",title:"PVT: ",type:"line"}],calc:function(t){var e=0;return t.map(function(i,n){var r,a,o={},s=i.close,l=null!==(r=i.volume)&&void 0!==r?r:1,c=(null!==(a=t[n-1])&&void 0!==a?a:i).close,u=0,d=c*l;return 0!==d&&(u=(s-c)/d),e+=u,o.pvt=e,o})}},Ye={name:"PSY",shortName:"PSY",calcParams:[12,6],figures:[{key:"psy",title:"PSY: ",type:"line"},{key:"maPsy",title:"MAPSY: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=[],o=[];return t.forEach(function(e,s){var l,c,u={},d=(null!==(l=t[s-1])&&void 0!==l?l:e).close,h=e.close-d>0?1:0;a.push(h),n+=h,s>=i[0]-1&&(u.psy=n/i[0]*100,r+=u.psy,s>=i[0]+i[1]-2&&(u.maPsy=r/i[1],r-=null!==(c=o[s-(i[1]-1)].psy)&&void 0!==c?c:0),n-=a[s-(i[0]-1)]),o.push(u)}),o}},Xe={name:"ROC",shortName:"ROC",calcParams:[12,6],figures:[{key:"roc",title:"ROC: ",type:"line"},{key:"maRoc",title:"MAROC: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[],r=0;return t.forEach(function(e,a){var o,s,l={};if(a>=i[0]-1){var c=e.close,u=(null!==(o=t[a-i[0]])&&void 0!==o?o:t[a-(i[0]-1)]).close;l.roc=0!==u?(c-u)/u*100:0,r+=l.roc,a>=i[0]-1+i[1]-1&&(l.maRoc=r/i[1],r-=null!==(s=n[a-(i[1]-1)].roc)&&void 0!==s?s:0)}n.push(l)}),n}},Ue={name:"RSI",shortName:"RSI",calcParams:[6,12,24],figures:[{key:"rsi1",title:"RSI1: ",type:"line"},{key:"rsi2",title:"RSI2: ",type:"line"},{key:"rsi3",title:"RSI3: ",type:"line"}],regenerateFigures:function(t){return t.map(function(t,e){var i=e+1;return{key:"rsi".concat(i),title:"RSI".concat(i,": "),type:"line"}})},calc:function(t,e){var i=e.calcParams,n=e.figures,r=[],a=[];return t.map(function(e,o){var s,l={},c=(null!==(s=t[o-1])&&void 0!==s?s:e).close,u=e.close-c;return i.forEach(function(e,i){var s,c,d;if(u>0?r[i]=(null!==(s=r[i])&&void 0!==s?s:0)+u:a[i]=(null!==(c=a[i])&&void 0!==c?c:0)+Math.abs(u),o>=e-1){0!==a[i]?l[n[i].key]=100-100/(1+r[i]/a[i]):l[n[i].key]=0;var h=t[o-(e-1)],p=null!==(d=t[o-e])&&void 0!==d?d:h,f=h.close-p.close;f>0?r[i]-=f:a[i]-=Math.abs(f)}}),l})}},Ge={name:"SMA",shortName:"SMA",series:Yt.Price,calcParams:[12,2],precision:2,figures:[{key:"sma",title:"SMA: ",type:"line"}],shouldOhlc:!0,calc:function(t,e){var i=e.calcParams,n=0,r=0;return t.map(function(t,e){var a={},o=t.close;return n+=o,e>=i[0]-1&&(r=e>i[0]-1?(o*i[1]+r*(i[0]-i[1]+1))/(i[0]+1):n/i[0],a.sma=r),a})}},je={name:"KDJ",shortName:"KDJ",calcParams:[9,3,3],figures:[{key:"k",title:"K: ",type:"line"},{key:"d",title:"D: ",type:"line"},{key:"j",title:"J: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=[];return t.forEach(function(e,r){var a,o,s,l,c={},u=e.close;if(r>=i[0]-1){var d=me(t.slice(r-(i[0]-1),r+1),"high","low"),h=d[0],p=d[1],f=h-p,v=(u-p)/(0===f?1:f)*100;c.k=((i[1]-1)*(null!==(o=null===(a=n[r-1])||void 0===a?void 0:a.k)&&void 0!==o?o:50)+v)/i[1],c.d=((i[2]-1)*(null!==(l=null===(s=n[r-1])||void 0===s?void 0:s.d)&&void 0!==l?l:50)+c.k)/i[2],c.j=3*c.k-2*c.d}n.push(c)}),n}},qe={name:"SAR",shortName:"SAR",series:Yt.Price,calcParams:[2,2,20],precision:2,shouldOhlc:!0,figures:[{key:"sar",title:"SAR: ",type:"circle",styles:function(t,e,i){var n,r,a=t.current,o=null!==(r=null===(n=a.indicatorData)||void 0===n?void 0:n.sar)&&void 0!==r?r:Number.MIN_SAFE_INTEGER,s=a.kLineData,l=((null===s||void 0===s?void 0:s.high)+(null===s||void 0===s?void 0:s.low))/2,c=oe.low?(c=s,o=n,s=-100,l=!l):c>p&&(c=p)}else{(-100===s||s>h)&&(s=h,o=Math.min(o+r,a)),c=u+o*(s-u);var f=Math.max(t[Math.max(1,i)-1].high,d);c=a[0]-1&&(i=e>a[0]-1?(2*p+(a[0]-1)*i)/(a[0]+1):o/a[0],s+=i,e>=2*a[0]-2&&(n=e>2*a[0]-2?(2*i+(a[0]-1)*n)/(a[0]+1):s/a[0],l+=n,e>=3*a[0]-3))){var f=void 0,v=0;e>3*a[0]-3?(f=(2*n+(a[0]-1)*r)/(a[0]+1),v=(f-r)/r*100):f=l/a[0],r=f,h.trix=v,c+=v,e>=3*a[0]+a[1]-4&&(h.maTrix=c/a[1],c-=null!==(d=u[e-(a[1]-1)].trix)&&void 0!==d?d:0)}u.push(h)}),u}};function Je(){return{key:"volume",title:"VOLUME: ",type:"bar",baseValue:0,styles:function(t,e,i){var n=t.current.kLineData,r=Ft(e.styles,"bars[0].noChangeColor",i.bars[0].noChangeColor);return Mt(n)&&(n.close>n.open?r=Ft(e.styles,"bars[0].upColor",i.bars[0].upColor):n.close=e-1&&(l[n[i].key]=r[i]/e,r[i]-=null!==(c=t[a-(e-1)].volume)&&void 0!==c?c:0)}),l})}},ti={name:"VR",shortName:"VR",calcParams:[26,6],figures:[{key:"vr",title:"VR: ",type:"line"},{key:"maVr",title:"MAVR: ",type:"line"}],calc:function(t,e){var i=e.calcParams,n=0,r=0,a=0,o=0,s=[];return t.forEach(function(e,l){var c,u,d,h,p,f={},v=e.close,g=(null!==(c=t[l-1])&&void 0!==c?c:e).close,m=null!==(u=e.volume)&&void 0!==u?u:0;if(v>g?n+=m:v=i[0]-1){var y=a/2;f.vr=r+y===0?0:(n+y)/(r+y)*100,o+=f.vr,l>=i[0]+i[1]-2&&(f.maVr=o/i[1],o-=null!==(d=s[l-(i[1]-1)].vr)&&void 0!==d?d:0);var b=t[l-(i[0]-1)],x=null!==(h=t[l-i[0]])&&void 0!==h?h:b,_=b.close,w=null!==(p=b.volume)&&void 0!==p?p:0;_>x.close?n-=w:_=s){var l=me(t.slice(r-s,r+1),"high","low"),c=l[0],u=l[1],d=c-u;a[n[i].key]=0===d?0:(o-c)/d*100}}),a})}},ii={},ni=[Te,Me,Ie,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Qe,ti,ei];function ri(t){ii[t.name]=jt.extend(t)}function ai(t){var e;return null!==(e=ii[t])&&void 0!==e?e:null}ni.forEach(function(t){ii[t.name]=jt.extend(t)});var oi=function(){function t(t){this._instances=new Map,this._chartStore=t}return t.prototype._overrideInstance=function(t,e){var i=e.shortName,n=e.series,r=e.calcParams,a=e.precision,o=e.figures,s=e.minValue,l=e.maxValue,c=e.shouldOhlc,u=e.shouldFormatBigNumber,d=e.visible,h=e.zLevel,p=e.styles,f=e.extendData,v=e.regenerateFigures,g=e.createTooltipDataSource,m=e.draw,y=e.calc,b=!1;Et(i)&&t.setShortName(i)&&(b=!0),Mt(n)&&t.setSeries(n)&&(b=!0);var x=!1;St(r)&&t.setCalcParams(r)&&(b=!0,x=!0),St(o)&&t.setFigures(o)&&(b=!0,x=!0),void 0!==s&&t.setMinValue(s)&&(b=!0),void 0!==l&&t.setMinValue(l)&&(b=!0),Tt(a)&&t.setPrecision(a)&&(b=!0),It(c)&&t.setShouldOhlc(c)&&(b=!0),It(u)&&t.setShouldFormatBigNumber(u)&&(b=!0),It(d)&&t.setVisible(d)&&(b=!0);var _=!1;return Tt(h)&&t.setZLevel(h)&&(b=!0,_=!0),Mt(p)&&t.setStyles(p)&&(b=!0),void 0!==f&&t.setExtendData(f)&&(b=!0,x=!0),void 0!==v&&t.setRegenerateFigures(v)&&(b=!0),void 0!==g&&t.setCreateTooltipDataSource(g)&&(b=!0),void 0!==m&&t.setDraw(m)&&(b=!0),kt(y)&&(t.calc=y,x=!0),[b,x,_]},t.prototype._sort=function(t){var e;Et(t)?null===(e=this._instances.get(t))||void 0===e||e.sort(function(t,e){return t.zLevel-e.zLevel}):this._instances.forEach(function(t){t.sort(function(t,e){return t.zLevel-e.zLevel})})},t.prototype.addInstance=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s;return G(this,function(l){switch(l.label){case 0:return n=t.name,r=this._instances.get(e),Mt(r)?(a=r.find(function(t){return t.name===n}),Mt(a)?[4,Promise.reject(new Error("Duplicate indicators."))]:[3,2]):[3,2];case 1:return[2,l.sent()];case 2:return Mt(r)||(r=[]),o=ai(n),s=new o,this.synchronizeSeriesPrecision(s),this._overrideInstance(s,t),i||(r=[]),r.push(s),this._instances.set(e,r),this._sort(e),[4,s.calcIndicator(this._chartStore.getDataList())];case 3:return[2,l.sent()]}})})},t.prototype.getInstances=function(t){var e;return null!==(e=this._instances.get(t))&&void 0!==e?e:[]},t.prototype.removeInstance=function(t,e){var i,n=!1,r=this._instances.get(t);if(Mt(r)){if(Et(e)){var a=r.findIndex(function(t){return t.name===e});a>-1&&(r.splice(a,1),n=!0)}else this._instances.set(t,[]),n=!0;0===(null===(i=this._instances.get(t))||void 0===i?void 0:i.length)&&this._instances.delete(t)}return n},t.prototype.hasInstances=function(t){return this._instances.has(t)},t.prototype.calcInstance=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o=this;return G(this,function(s){switch(s.label){case 0:return i=[],Et(t)?Et(e)?(n=this._instances.get(e),Mt(n)&&(r=n.find(function(e){return e.name===t}),Mt(r)&&i.push(r.calcIndicator(this._chartStore.getDataList())))):this._instances.forEach(function(e){var n=e.find(function(e){return e.name===t});Mt(n)&&i.push(n.calcIndicator(o._chartStore.getDataList()))}):this._instances.forEach(function(t){t.forEach(function(t){i.push(t.calcIndicator(o._chartStore.getDataList()))})}),[4,Promise.all(i)];case 1:return a=s.sent(),[2,a.includes(!0)]}})})},t.prototype.getInstanceByPaneId=function(t,e){var i,n,r=function(t){var e=new Map;return t.forEach(function(t){e.set(t.name,t)}),e};if(Et(t)){var a=null!==(i=this._instances.get(t))&&void 0!==i?i:[];return Et(e)?null!==(n=null===a||void 0===a?void 0:a.find(function(t){return t.name===e}))&&void 0!==n?n:null:r(a)}var o=new Map;return this._instances.forEach(function(t,e){o.set(e,r(t))}),o},t.prototype.synchronizeSeriesPrecision=function(t){var e=this._chartStore.getPrecision(),i=e.price,n=e.volume,r=function(t){switch(t.series){case Yt.Price:t.setPrecision(i,!0);break;case Yt.Volume:t.setPrecision(n,!0);break}};Mt(t)?r(t):this._instances.forEach(function(t){t.forEach(function(t){r(t)})})},t.prototype.override=function(t,e){return U(this,void 0,void 0,function(){var i,n,r,a,o,s,l,c=this;return G(this,function(u){switch(u.label){case 0:return i=t.name,n=new Map,null!==e?(r=this._instances.get(e),Mt(r)&&n.set(e,r)):n=this._instances,a=!1,o=[],s=!1,n.forEach(function(e){var n=e.find(function(t){return t.name===i});if(Mt(n)){var r=c._overrideInstance(n,t);r[2]&&(s=!0),r[1]?o.push(n.calcIndicator(c._chartStore.getDataList())):r[0]&&(a=!0)}}),s&&this._sort(),[4,Promise.all(o)];case 1:return l=u.sent(),[2,[a,l.includes(!0)]]}})})},t}(),si=function(){function t(t){this._crosshair={},this._activeIcon=null,this._chartStore=t}return t.prototype.setCrosshair=function(t,e){var i,n,r=null!==e&&void 0!==e?e:{},a=r.notInvalidate,o=r.notExecuteAction,s=this._chartStore.getDataList(),l=null!==t&&void 0!==t?t:{};Tt(l.x)?(i=this._chartStore.getTimeScaleStore().coordinateToDataIndex(l.x),n=i<0?0:i>s.length-1?s.length-1:i):(i=s.length-1,n=i);var c=s[n],u=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(i),d={x:this._crosshair.x,y:this._crosshair.y,paneId:this._crosshair.paneId};this._crosshair=X(X({},l),{realX:u,kLineData:c,realDataIndex:i,dataIndex:n}),d.x===l.x&&d.y===l.y&&d.paneId===l.paneId||(null===c||null!==o&&void 0!==o&&o||this._chartStore.getChart().crosshairChange(this._crosshair),null!==a&&void 0!==a&&a||this._chartStore.getChart().updatePane(1))},t.prototype.recalculateCrosshair=function(t){this.setCrosshair(this._crosshair,{notInvalidate:t})},t.prototype.getCrosshair=function(){return this._crosshair},t.prototype.setActiveIcon=function(t){this._activeIcon=null!==t&&void 0!==t?t:null},t.prototype.getActiveIcon=function(){return this._activeIcon},t.prototype.clear=function(){this.setCrosshair({},{notInvalidate:!0}),this.setActiveIcon()},t}(),li={name:"fibonacciLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e,i=t.coordinates,n=t.bounding,r=t.overlay,a=t.precision,o=t.thousandsSeparator,s=t.decimalFoldThreshold,l=t.yAxis,c=r.points;if(i.length>0){var u=null===(e=null===l||void 0===l?void 0:l.isInCandle())||void 0===e||e?a.price:a.excludePriceVolumeMax,d=[],h=[],p=0,f=n.width;if(i.length>1&&Tt(c[0].value)&&Tt(c[1].value)){var v=[1,.786,.618,.5,.382,.236,0],g=i[0].y-i[1].y,m=c[0].value-c[1].value;v.forEach(function(t){var e,n=i[1].y+g*t,r=Wt(zt(((null!==(e=c[1].value)&&void 0!==e?e:0)+m*t).toFixed(u),o),s);d.push({coordinates:[{x:p,y:n},{x:f,y:n}]}),h.push({x:p,y:n,text:"".concat(r," (").concat((100*t).toFixed(1),"%)"),baseline:"bottom"})})}return[{type:"line",attrs:d},{type:"text",isCheckEvent:!1,attrs:h}]}return[]}},ci={name:"horizontalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding,n={x:0,y:e[0].y};return Mt(e[1])&&e[0].x-1)for(var r=n;r>-1;r--)if(this._children[r].dispatchEvent(t,e,i))return!0;return this.onEvent(t,e,i)},t.prototype.addChild=function(t){return this._children.push(t),this},t.prototype.clear=function(){this._children=[]},t}(),pi=2,fi=function(t){function e(e){var i=t.call(this)||this;return i.attrs=e.attrs,i.styles=e.styles,i}return B(e,t),e.prototype.checkEventOn=function(t){return this.checkEventOnImp(t,this.attrs,this.styles)},e.prototype.setAttrs=function(t){return this.attrs=t,this},e.prototype.setStyles=function(t){return this.styles=t,this},e.prototype.draw=function(t){this.drawImp(t,this.attrs,this.styles)},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.checkEventOnImp=function(e,i,n){return t.checkEventOn(e,i,n)},i.prototype.drawImp=function(e,i,n){t.draw(e,i,n)},i}(e);return i},e}(hi);function vi(t,e){var i=[];i=i.concat(e);for(var n=0;n1)for(var a=1;a0&&i<1?i:0:i?.5:0;if(r>0&&n>2){for(var a=e[0].x,o=e[0].y,s=1;s1&&(2!==i.length||i[0].x!==i[1].x&&i[0].y!==i[1].y?(t.save(),c%2===1&&t.translate(.5,.5),t.beginPath(),t.moveTo(i[0].x,i[0].y),bi(t,i,s),t.stroke(),t.closePath(),t.restore()):(t.beginPath(),i[0].x===i[1].x?(t.moveTo(i[0].x+f,i[0].y),t.lineTo(i[1].x+f,i[1].y)):(t.moveTo(i[0].x,i[0].y+f),t.lineTo(i[1].x,i[1].y+f)),t.stroke(),t.closePath()))})}var _i={name:"line",checkEventOn:vi,draw:function(t,e,i){xi(t,e,i)}};function wi(t,e,i){var n=null!==i&&void 0!==i?i:0,r=[];if(t.length>1)if(t[0].x===t[1].x){var a=0,o=e.height;if(r.push({coordinates:[{x:t[0].x,y:a},{x:t[0].x,y:o}]}),t.length>2){r.push({coordinates:[{x:t[2].x,y:a},{x:t[2].x,y:o}]});for(var s=t[0].x-t[2].x,l=0;l2){var v=t[2].y-p*t[2].x;r.push({coordinates:[{x:u,y:u*p+v},{x:d,y:d*p+v}]});for(s=f-v,l=0;l1){var i=void 0;return i=t[0].x===t[1].x&&t[0].y!==t[1].y?t[0].yt[1].x?{x:0,y:mi(t[0],t[1],{x:0,y:t[0].y})}:{x:e.width,y:mi(t[0],t[1],{x:e.width,y:t[0].y})},{coordinates:[t[0],i]}}return[]}var Ti={name:"rayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return[{type:"line",attrs:Ai(e,i)}]}},Mi={name:"segment",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates;return 2===e.length?[{type:"line",attrs:{coordinates:e}}]:[]}},Ii={name:"straightLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;return 2===e.length?e[0].x===e[1].x?[{type:"line",attrs:{coordinates:[{x:e[0].x,y:0},{x:e[0].x,y:i.height}]}}]:[{type:"line",attrs:{coordinates:[{x:0,y:mi(e[0],e[1],{x:0,y:e[0].y})},{x:i.width,y:mi(e[0],e[1],{x:i.width,y:e[0].y})}]}}]:[]}},Ei={name:"verticalRayLine",totalStep:3,needDefaultPointFigure:!0,needDefaultXAxisFigure:!0,needDefaultYAxisFigure:!0,createPointFigures:function(t){var e=t.coordinates,i=t.bounding;if(2===e.length){var n={x:e[0].x,y:0};return e[0].y0&&l.set(e[0],n)};try{for(var u=j(this._instances),d=u.next();!d.done;d=u.next()){var h=d.value;c(h)}}catch(f){e={error:f}}finally{try{d&&!d.done&&(i=u.return)&&i.call(u)}finally{if(e)throw e.error}}this._instances=l}else this._instances.forEach(function(t,e){a.push(e),t.forEach(function(t){var e;null===(e=t.onRemoved)||void 0===e||e.call(t,{overlay:t})})}),this._instances.clear();if(a.length>0){var p=this._chartStore.getChart();a.forEach(function(t){p.updatePane(1,t)}),p.updatePane(1,Vi.X_AXIS)}},t.prototype.setPressedInstanceInfo=function(t){this._pressedInstanceInfo=t},t.prototype.getPressedInstanceInfo=function(){return this._pressedInstanceInfo},t.prototype.updatePointPosition=function(t,e){if(t>0){var i=this._chartStore.getDataList();this._instances.forEach(function(n){n.forEach(function(n){var r=n.points;r.forEach(function(n){if(!Mt(n.timestamp)&&Mt(n.dataIndex)){e===Kt.Forward&&(n.dataIndex=n.dataIndex+t);var r=i[n.dataIndex];n.timestamp=null===r||void 0===r?void 0:r.timestamp}})})})}},t.prototype.setHoverInstanceInfo=function(t,e){var i,n,r=this._hoverInstanceInfo,a=r.instance,o=r.figureType,s=r.figureKey,l=r.figureIndex;if(((null===a||void 0===a?void 0:a.id)!==(null===(i=t.instance)||void 0===i?void 0:i.id)||o!==t.figureType||l!==t.figureIndex)&&(this._hoverInstanceInfo=t,(null===a||void 0===a?void 0:a.id)!==(null===(n=t.instance)||void 0===n?void 0:n.id))){var c=!1,u=!1;null!==a&&(u=!0,kt(a.onMouseLeave)&&(a.onMouseLeave(X({overlay:a,figureKey:s,figureIndex:l},e)),c=!0)),null!==t.instance&&(u=!0,kt(t.instance.onMouseEnter)&&(t.instance.onMouseEnter(X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),c=!0)),u&&this._sort(),c||this._chartStore.getChart().updatePane(1)}},t.prototype.getHoverInstanceInfo=function(){return this._hoverInstanceInfo},t.prototype.setClickInstanceInfo=function(t,e){var i,n,r,a,o,s,l,c,u,d=this._clickInstanceInfo,h=d.paneId,p=d.instance,f=d.figureType,v=d.figureKey,g=d.figureIndex;if(null!==(n=null===(i=t.instance)||void 0===i?void 0:i.isDrawing())&&void 0!==n&&n||null===(a=null===(r=t.instance)||void 0===r?void 0:r.onClick)||void 0===a||a.call(r,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e)),((null===p||void 0===p?void 0:p.id)!==(null===(o=t.instance)||void 0===o?void 0:o.id)||f!==t.figureType||g!==t.figureIndex)&&(this._clickInstanceInfo=t,(null===p||void 0===p?void 0:p.id)!==(null===(s=t.instance)||void 0===s?void 0:s.id))){null===(l=null===p||void 0===p?void 0:p.onDeselected)||void 0===l||l.call(p,X({overlay:p,figureKey:v,figureIndex:g},e)),null===(u=null===(c=t.instance)||void 0===c?void 0:c.onSelected)||void 0===u||u.call(c,X({overlay:t.instance,figureKey:t.figureKey,figureIndex:t.figureIndex},e));var m=this._chartStore.getChart();m.updatePane(1,t.paneId),h!==t.paneId&&m.updatePane(1,h),m.updatePane(1,Vi.X_AXIS)}},t.prototype.getClickInstanceInfo=function(){return this._clickInstanceInfo},t.prototype.isEmpty=function(){return 0===this._instances.size&&null===this._progressInstanceInfo},t.prototype.isDrawing=function(){var t,e;return null!==this._progressInstanceInfo&&null!==(e=null===(t=this._progressInstanceInfo)||void 0===t?void 0:t.instance.isDrawing())&&void 0!==e&&e},t}(),Hi=function(){function t(){this._actions=new Map}return t.prototype.execute=function(t,e){var i;null===(i=this._actions.get(t))||void 0===i||i.execute(e)},t.prototype.subscribe=function(t,e){var i;this._actions.has(t)||this._actions.set(t,new Xt),null===(i=this._actions.get(t))||void 0===i||i.subscribe(e)},t.prototype.unsubscribe=function(t,e){var i=this._actions.get(t);Mt(i)&&(i.unsubscribe(e),i.isEmpty()&&this._actions.delete(t))},t.prototype.has=function(t){var e=this._actions.get(t);return Mt(e)&&!e.isEmpty()},t}(),Ki={grid:{horizontal:{color:"#EDEDED"},vertical:{color:"#EDEDED"}},candle:{priceMark:{high:{color:"#76808F"},low:{color:"#76808F"}},tooltip:{rect:{color:"#FEFEFE",borderColor:"#F2F3F5"},text:{color:"#76808F"}}},indicator:{tooltip:{text:{color:"#76808F"}}},xAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},yAxis:{axisLine:{color:"#DDDDDD"},tickText:{color:"#76808F"},tickLine:{color:"#DDDDDD"}},separator:{color:"#DDDDDD"},crosshair:{horizontal:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}},vertical:{line:{color:"#76808F"},text:{borderColor:"#686D76",backgroundColor:"#686D76"}}}},Yi={grid:{horizontal:{color:"#292929"},vertical:{color:"#292929"}},candle:{priceMark:{high:{color:"#929AA5"},low:{color:"#929AA5"}},tooltip:{rect:{color:"rgba(10, 10, 10, .6)",borderColor:"rgba(10, 10, 10, .6)"},text:{color:"#929AA5"}}},indicator:{tooltip:{text:{color:"#929AA5"}}},xAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},yAxis:{axisLine:{color:"#333333"},tickText:{color:"#929AA5"},tickLine:{color:"#333333"}},separator:{color:"#333333"},crosshair:{horizontal:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}},vertical:{line:{color:"#929AA5"},text:{borderColor:"#373a40",backgroundColor:"#373a40"}}}},Xi={light:Ki,dark:Yi};function Ui(t){var e;return null!==(e=Xi[t])&&void 0!==e?e:null}var Gi=function(){function t(t,e){this._styles=gt(),this._customApi=ne(),this._locale=re,this._precision={price:2,volume:0},this._thousandsSeparator=",",this._decimalFoldThreshold=3,this._dataList=[],this._loadMoreCallback=null,this._loadDataCallback=null,this._loading=!0,this._forwardMore=!0,this._backwardMore=!0,this._timeScaleStore=new Ae(this),this._indicatorStore=new oi(this),this._overlayStore=new $i(this),this._tooltipStore=new si(this),this._actionStore=new Hi,this._visibleDataList=[],this._chart=t,this.setOptions(e)}return t.prototype.adjustVisibleDataList=function(){this._visibleDataList=[];for(var t=this._timeScaleStore.getVisibleRange(),e=t.realFrom,i=t.realTo,n=e;n0&&(this._decimalFoldThreshold=u)}return this},t.prototype.getStyles=function(){return this._styles},t.prototype.getLocale=function(){return this._locale},t.prototype.getCustomApi=function(){return this._customApi},t.prototype.getThousandsSeparator=function(){return this._thousandsSeparator},t.prototype.getDecimalFoldThreshold=function(){return this._decimalFoldThreshold},t.prototype.getPrecision=function(){return this._precision},t.prototype.setPrecision=function(t){return this._precision=t,this._indicatorStore.synchronizeSeriesPrecision(),this},t.prototype.getDataList=function(){return this._dataList},t.prototype.getVisibleFirstData=function(){var t,e=this._timeScaleStore.getVisibleRange().from;return null!==(t=this._dataList[e])&&void 0!==t?t:null},t.prototype.getVisibleDataList=function(){return this._visibleDataList},t.prototype.addData=function(t,e,i){return U(this,void 0,void 0,function(){var n,r,a,o,s,l,c;return G(this,function(u){switch(u.label){case 0:if(n=!1,r=!1,a=0,St(t)){switch(a=t.length,e){case Kt.Init:this.clear(),this._dataList=t,this._forwardMore=null===i||void 0===i||i,this._timeScaleStore.resetOffsetRightDistance(),r=!0;break;case Kt.Backward:this._dataList=this._dataList.concat(t),this._backwardMore=null!==i&&void 0!==i&&i,r=a>0;break;case Kt.Forward:this._dataList=t.concat(this._dataList),this._forwardMore=null!==i&&void 0!==i&&i,r=a>0}this._loading=!1,n=!0}else o=this._dataList.length,s=t.timestamp,l=Ft(this._dataList[o-1],"timestamp",0),s>l?(this._dataList.push(t),c=this._timeScaleStore.getLastBarRightSideDiffBarCount(),c<0&&this._timeScaleStore.setLastBarRightSideDiffBarCount(--c),a=1,n=!0,r=!0):s===l&&(this._dataList[o-1]=t,n=!0,r=!0);if(!n)return[3,5];u.label=1;case 1:return u.trys.push([1,4,,5]),this._overlayStore.updatePointPosition(a,e),r?(this._timeScaleStore.adjustVisibleRange(),this._tooltipStore.recalculateCrosshair(!0),[4,this._indicatorStore.calcInstance()]):[3,3];case 2:u.sent(),this._chart.adjustPaneViewport(!1,!0,!0,!0),u.label=3;case 3:return this._actionStore.execute(Pt.OnDataReady),[3,5];case 4:return u.sent(),[3,5];case 5:return[2]}})})},t.prototype.setLoadMoreCallback=function(t){this._loadMoreCallback=t},t.prototype.executeLoadMoreCallback=function(t){this._forwardMore&&!this._loading&&Mt(this._loadMoreCallback)&&(this._loading=!0,this._loadMoreCallback(t))},t.prototype.setLoadDataCallback=function(t){this._loadDataCallback=t},t.prototype.executeLoadDataCallback=function(t){var e=this;if(!this._loading&&Mt(this._loadDataCallback)&&(this._forwardMore&&t.type===Kt.Forward||this._backwardMore&&t.type===Kt.Backward)){var i=function(i,n){e.addData(i,t.type,n).then(function(){}).catch(function(){})};this._loading=!0,this._loadDataCallback(X(X({},t),{callback:i}))}},t.prototype.clear=function(){this._forwardMore=!0,this._backwardMore=!0,this._loading=!0,this._dataList=[],this._visibleDataList=[],this._timeScaleStore.clear(),this._tooltipStore.clear()},t.prototype.getTimeScaleStore=function(){return this._timeScaleStore},t.prototype.getIndicatorStore=function(){return this._indicatorStore},t.prototype.getOverlayStore=function(){return this._overlayStore},t.prototype.getTooltipStore=function(){return this._tooltipStore},t.prototype.getActionStore=function(){return this._actionStore},t.prototype.getChart=function(){return this._chart},t}(),ji={MAIN:"main",X_AXIS:"xAxis",Y_AXIS:"yAxis",SEPARATOR:"separator"},qi=7;function Zi(){return U(this,void 0,void 0,function(){return G(this,function(t){switch(t.label){case 0:return[4,new Promise(function(t){var e=new ResizeObserver(function(i){t(i.every(function(t){return"devicePixelContentBoxSize"in t})),e.disconnect()});e.observe(document.body,{box:"device-pixel-content-box"})}).catch(function(){return!1})];case 1:return[2,t.sent()]}})})}var Ji=function(){function t(t,e){var i=this;this._supportedDevicePixelContentBox=!1,this._width=0,this._height=0,this._pixelWidth=0,this._pixelHeight=0,this._nextPixelWidth=0,this._nextPixelHeight=0,this._requestAnimationId=ae,this._mediaQueryListener=function(){var t=Vt(i._element);i._nextPixelWidth=Math.round(i._element.clientWidth*t),i._nextPixelHeight=Math.round(i._element.clientHeight*t),i._resetPixelRatio()},this._listener=e,this._element=he("canvas",t),this._ctx=this._element.getContext("2d",{willReadFrequently:!0}),Zi().then(function(t){i._supportedDevicePixelContentBox=t,t?(i._resizeObserver=new ResizeObserver(function(t){var e,n=t.find(function(t){return t.target===i._element}),r=null===(e=null===n||void 0===n?void 0:n.devicePixelContentBoxSize)||void 0===e?void 0:e[0];Mt(r)&&(i._nextPixelWidth=r.inlineSize,i._nextPixelHeight=r.blockSize,i._pixelWidth===i._nextPixelWidth&&i._pixelHeight===i._nextPixelHeight||i._resetPixelRatio())}),i._resizeObserver.observe(i._element,{box:"device-pixel-content-box"})):(i._mediaQueryList=window.matchMedia("(resolution: ".concat(Vt(i._element),"dppx)")),i._mediaQueryList.addListener(i._mediaQueryListener))}).catch(function(t){return!1})}return t.prototype._resetPixelRatio=function(){var t=this;this._executeListener(function(){var e=t._element.clientWidth,i=t._element.clientHeight,n=t._nextPixelWidth/e,r=t._nextPixelHeight/i;t._width=e,t._height=i,t._pixelWidth=t._nextPixelWidth,t._pixelHeight=t._nextPixelHeight,t._element.width=t._nextPixelWidth,t._element.height=t._nextPixelHeight,t._ctx.scale(n,r)})},t.prototype._executeListener=function(t){var e=this;this._requestAnimationId===ae&&(this._requestAnimationId=oe(function(){e._ctx.clearRect(0,0,e._width,e._height),null===t||void 0===t||t(),e._listener(),e._requestAnimationId=ae}))},t.prototype.update=function(t,e){if(this._width!==t||this._height!==e){if(this._element.style.width="".concat(t,"px"),this._element.style.height="".concat(e,"px"),!this._supportedDevicePixelContentBox){var i=Vt(this._element);this._nextPixelWidth=Math.round(t*i),this._nextPixelHeight=Math.round(e*i),this._resetPixelRatio()}}else this._executeListener()},t.prototype.getElement=function(){return this._element},t.prototype.getContext=function(){return this._ctx},t.prototype.destroy=function(){Mt(this._resizeObserver)&&this._resizeObserver.unobserve(this._element),Mt(this._mediaQueryList)&&this._mediaQueryList.removeListener(this._mediaQueryListener)},t}();function Qi(t){var e={width:0,height:0,left:0,right:0,top:0,bottom:0};return Mt(t)&&wt(e,t),e}var tn=function(t){function e(e,i){var n=t.call(this)||this;return n._bounding=Qi(),n._pane=i,n._rootContainer=e,n._container=n.createContainer(),e.appendChild(n._container),n}return B(e,t),e.prototype.setBounding=function(t){return wt(this._bounding,t),this},e.prototype.getContainer=function(){return this._container},e.prototype.getBounding=function(){return this._bounding},e.prototype.getPane=function(){return this._pane},e.prototype.update=function(t){this.updateImp(this._container,this._bounding,null!==t&&void 0!==t?t:3)},e.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},e}(hi),en=function(t){function e(e,i){var n=t.call(this,e,i)||this;n._mainCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateMain(n._mainCanvas.getContext())}),n._overlayCanvas=new Ji({position:"absolute",top:"0",left:"0",zIndex:"2",boxSizing:"border-box"},function(){n.updateOverlay(n._overlayCanvas.getContext())});var r=n.getContainer();return r.appendChild(n._mainCanvas.getElement()),r.appendChild(n._overlayCanvas.getElement()),n}return B(e,t),e.prototype.createContainer=function(){return he("div",{margin:"0",padding:"0",position:"absolute",top:"0",overflow:"hidden",boxSizing:"border-box",zIndex:"1"})},e.prototype.updateImp=function(t,e,i){var n=e.width,r=e.height,a=e.left;t.style.left="".concat(a,"px");var o=i,s=t.clientWidth,l=t.clientHeight;switch(n===s&&r===l||(t.style.width="".concat(n,"px"),t.style.height="".concat(r,"px"),o=3),o){case 0:this._mainCanvas.update(n,r);break;case 1:this._overlayCanvas.update(n,r);break;case 3:case 4:this._mainCanvas.update(n,r),this._overlayCanvas.update(n,r);break}},e.prototype.destroy=function(){this._mainCanvas.destroy(),this._overlayCanvas.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);return r.width=i*o,r.height=n*o,a.scale(o,o),a.drawImage(this._mainCanvas.getElement(),0,0,i,n),t&&a.drawImage(this._overlayCanvas.getElement(),0,0,i,n),r},e}(tn);function nn(t){return"transparent"===t||"none"===t||/^[rR][gG][Bb][Aa]\(([\s]*(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)[\s]*,){3}[\s]*0[\s]*\)$/.test(t)||/^[hH][Ss][Ll][Aa]\(([\s]*(360|3[0-5][0-9]|[012]?[0-9][0-9]?)[\s]*,)([\s]*((100|[0-9][0-9]?)%|0)[\s]*,){2}([\s]*0[\s]*)\)$/.test(t)}function rn(t,e){var i=[];i=i.concat(e);for(var n=0;ns*s))return!0}return!1}function an(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f,g=(a===O.Fill||i.style===O.StrokeFill)&&(!Et(s)||!nn(s));g&&(t.fillStyle=s,n.forEach(function(e){var i=e.x,n=e.y,r=e.r;t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.fill()})),(a===O.Stroke||i.style===O.StrokeFill)&&c>0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r;(!g||r>c)&&(t.beginPath(),t.arc(i,n,r,0,2*Math.PI),t.closePath(),t.stroke())}))}var on={name:"circle",checkEventOn:rn,draw:function(t,e,i){an(t,e,i)}};function sn(t,e){var i=[];i=i.concat(e);for(var n=0;nt.y!==a[s].y>t.y&&t.x<(a[s].x-a[o].x)*(t.y-a[o].y)/(a[s].y-a[o].y)+a[o].x&&(r=!r);if(r)return!0}return!1}function ln(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?O.Fill:r,o=i.color,s=void 0===o?"currentColor":o,l=i.borderSize,c=void 0===l?1:l,u=i.borderColor,d=void 0===u?"currentColor":u,h=i.borderStyle,p=void 0===h?N.Solid:h,f=i.borderDashedValue,v=void 0===f?[2,2]:f;a!==O.Fill&&i.style!==O.StrokeFill||Et(s)&&nn(s)||(t.fillStyle=s,n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n0&&!nn(d)&&(t.strokeStyle=d,t.lineWidth=c,p===N.Dashed?t.setLineDash(v):t.setLineDash([]),n.forEach(function(e){var i=e.coordinates;t.beginPath(),t.moveTo(i[0].x,i[0].y);for(var n=1;n=a&&t.x<=a+o&&t.y>=s&&t.y<=s+l)return!0}return!1}function dn(t,e,i){var n,r=[];r=r.concat(e);var a=i.style,o=void 0===a?O.Fill:a,s=i.color,l=void 0===s?"transparent":s,c=i.borderSize,u=void 0===c?1:c,d=i.borderColor,h=void 0===d?"transparent":d,p=i.borderStyle,f=void 0===p?N.Solid:p,v=i.borderRadius,g=void 0===v?0:v,m=i.borderDashedValue,y=void 0===m?[2,2]:m,b=null!==(n=t.roundRect)&&void 0!==n?n:t.rect,x=(o===O.Fill||i.style===O.StrokeFill)&&(!Et(l)||!nn(l));if(x&&(t.fillStyle=l,r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;t.beginPath(),b.call(t,i,n,r,a,g),t.closePath(),t.fill()})),(o===O.Stroke||i.style===O.StrokeFill)&&u>0&&!nn(h)){t.strokeStyle=h,t.fillStyle=h,t.lineWidth=u,f===N.Dashed?t.setLineDash(y):t.setLineDash([]);var _=u%2===1?.5:0,w=Math.round(2*_);r.forEach(function(e){var i=e.x,n=e.y,r=e.width,a=e.height;r>2*u&&a>2*u?(t.beginPath(),b.call(t,i+_,n+_,r-w,a-w,g),t.closePath(),t.stroke()):x||t.fillRect(i,n,r,a)})}}var hn={name:"rect",checkEventOn:un,draw:function(t,e,i){dn(t,e,i)}};function pn(t,e){var i,n,r=e.size,a=void 0===r?12:r,o=e.paddingLeft,s=void 0===o?0:o,l=e.paddingTop,c=void 0===l?0:l,u=e.paddingRight,d=void 0===u?0:u,h=e.paddingBottom,p=void 0===h?0:h,f=e.weight,v=void 0===f?"normal":f,g=e.family,m=t.x,y=t.y,b=t.text,x=t.align,_=void 0===x?"left":x,w=t.baseline,C=void 0===w?"top":w,S=t.width,k=t.height,A=null!==S&&void 0!==S?S:s+Ht(b,a,v,g)+d,T=null!==k&&void 0!==k?k:c+a+p;switch(_){case"left":case"start":i=m;break;case"right":case"end":i=m-A;break;default:i=m-A/2;break}switch(C){case"top":case"hanging":n=y;break;case"bottom":case"ideographic":case"alphabetic":n=y-T;break;default:n=y-T/2;break}return{x:i,y:n,width:A,height:T}}function fn(t,e,i){var n=[];n=n.concat(e);for(var r=0;r=o&&t.x<=o+l&&t.y>=s&&t.y<=s+c)return!0}return!1}function vn(t,e,i){var n=[];n=n.concat(e);var r=i.color,a=void 0===r?"currentColor":r,o=i.size,s=void 0===o?12:o,l=i.family,c=i.weight,u=i.paddingLeft,d=void 0===u?0:u,h=i.paddingTop,p=void 0===h?0:h,f=i.paddingRight,v=void 0===f?0:f,g=n.map(function(t){return pn(t,i)});dn(t,g,X(X({},i),{color:i.backgroundColor})),t.textAlign="left",t.textBaseline="top",t.font=$t(s,c,l),t.fillStyle=a,n.forEach(function(e,i){var n=g[i];t.fillText(e.text,n.x+d,n.y+p,n.width-d-v)})}var gn={name:"text",checkEventOn:fn,draw:function(t,e,i){vn(t,e,i)}},mn=gn;function yn(t,e){var i=t.x-e.x,n=t.y-e.y;return Math.sqrt(i*i+n*n)}function bn(t,e){var i=[];i=i.concat(e);for(var n=0;n=Math.min(l,u)-pi&&t.y<=Math.max(c,d)+pi&&t.y>=Math.min(c,d)-pi)return!0}}return!1}function xn(t,e,i){var n=[];n=n.concat(e);var r=i.style,a=void 0===r?N.Solid:r,o=i.size,s=void 0===o?1:o,l=i.color,c=void 0===l?"currentColor":l,u=i.dashedValue,d=void 0===u?[2,2]:u;t.lineWidth=s,t.strokeStyle=c,a===N.Dashed?t.setLineDash(d):t.setLineDash([]),n.forEach(function(e){var i=e.x,n=e.y,r=e.r,a=e.startAngle,o=e.endAngle;t.beginPath(),t.arc(i,n,r,a,o),t.stroke(),t.closePath()})}var _n={name:"arc",checkEventOn:bn,draw:function(t,e,i){xn(t,e,i)}},wn={},Cn=[on,_i,cn,hn,gn,mn,_n];function Sn(t){var e;return null!==(e=wn[t])&&void 0!==e?e:null}Cn.forEach(function(t){wn[t.name]=fi.extend(t)});var kn=function(t){function e(e){var i=t.call(this)||this;return i._widget=e,i}return B(e,t),e.prototype.getWidget=function(){return this._widget},e.prototype.createFigure=function(t,e){var i=Sn(t.name);if(null!==i){var n=new i(t);if(Mt(e)){for(var r in e)e.hasOwnProperty(r)&&n.registerEvent(r,e[r]);this.addChild(n)}return n}return null},e.prototype.draw=function(t){this.clear(),this.drawImp(t)},e}(hi),An=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this.getWidget(),r=this.getWidget().getPane(),a=r.getChart(),o=n.getBounding(),s=a.getStyles().grid,l=s.show;if(l){t.save(),t.globalCompositeOperation="destination-over";var c=s.horizontal,u=c.show;if(u){var d=r.getAxisComponent(),h=d.getTicks().map(function(t){return{coordinates:[{x:0,y:t.coord},{x:o.width,y:t.coord}]}});null===(e=this.createFigure({name:"line",attrs:h,styles:c}))||void 0===e||e.draw(t)}var p=s.vertical,f=p.show;if(f){var v=a.getXAxisPane().getAxisComponent();h=v.getTicks().map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:o.height}]}});null===(i=this.createFigure({name:"line",attrs:h,styles:p}))||void 0===i||i.draw(t)}t.restore()}},e}(kn),Tn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.eachChildren=function(t){var e=this.getWidget().getPane(),i=e.getChart().getChartStore(),n=i.getVisibleDataList(),r=i.getTimeScaleStore().getBarSpace();n.forEach(function(e,i){t(e,r,i)})},e}(kn),Mn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._boundCandleBarClickEvent=function(t){return function(){return e.getWidget().getPane().getChart().getChartStore().getActionStore().execute(Pt.OnCandleBarClick,t),!1}},e}return B(e,t),e.prototype.drawImp=function(t){var e=this,i=this.getWidget().getPane(),n=i.getId()===Vi.CANDLE,r=i.getChart().getChartStore(),a=this.getCandleBarOptions(r);if(null!==a){var o=0,s=0;if(a.type===H.Ohlc){var l=r.getTimeScaleStore().getBarSpace().gapBar;o=Math.min(Math.max(Math.round(.2*l),1),8),o>2&&o%2===1&&o--,s=Math.floor(s/2)}var c=i.getAxisComponent();this.eachChildren(function(i,r){var l=i.data,u=i.x;if(Mt(l)){var d=l.open,h=l.high,p=l.low,f=l.close,v=a.type,g=a.styles,m=[];f>d?(m[0]=g.upColor,m[1]=g.upBorderColor,m[2]=g.upWickColor):fd?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.CandleDownStroke:_=d>f?e._createStrokeBar(u,x,r,m):e._createSolidBar(u,x,r,m);break;case H.Ohlc:_=[{name:"rect",attrs:[{x:u-s,y:x[0],width:o,height:x[3]-x[0]},{x:u-r.halfGapBar,y:y+o>x[3]?x[3]-o:y,width:r.halfGapBar,height:o},{x:u+s,y:b+o>x[3]?x[3]-o:b,width:r.halfGapBar-s,height:o}],styles:{color:m[0]}}];break}_.forEach(function(r){var a,o;n&&(o={mouseClickEvent:e._boundCandleBarClickEvent(i)}),null===(a=e.createFigure(r,o))||void 0===a||a.draw(t)})}})}},e.prototype.getCandleBarOptions=function(t){var e=t.getStyles().candle;return{type:e.type,styles:e.bar}},e.prototype._createSolidBar=function(t,e,i,n){return[{name:"rect",attrs:{x:t,y:e[0],width:1,height:e[3]-e[0]},styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.StrokeFill,color:n[0],borderColor:n[1]}}]},e.prototype._createStrokeBar=function(t,e,i,n){return[{name:"rect",attrs:[{x:t,y:e[0],width:1,height:e[1]-e[0]},{x:t,y:e[2],width:1,height:e[3]-e[2]}],styles:{color:n[2]}},{name:"rect",attrs:{x:t-i.halfGapBar,y:e[1],width:i.gapBar,height:Math.max(1,e[2]-e[1])},styles:{style:O.Stroke,borderColor:n[1]}}]},e}(Tn),In=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getCandleBarOptions=function(t){var e,i,n=this.getWidget().getPane(),r=n.getAxisComponent();if(!r.isInCandle()){var a=t.getIndicatorStore().getInstances(n.getId());try{for(var o=j(a),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.shouldOhlc&&l.visible){var c=l.styles,u=t.getStyles().indicator,d=Ft(c,"ohlc.upColor",u.ohlc.upColor),h=Ft(c,"ohlc.downColor",u.ohlc.downColor),p=Ft(c,"ohlc.noChangeColor",u.ohlc.noChangeColor);return{type:H.Ohlc,styles:{upColor:d,downColor:h,noChangeColor:p,upBorderColor:d,downBorderColor:h,noChangeBorderColor:p,upWickColor:d,downWickColor:h,noChangeWickColor:p}}}}}catch(f){e={error:f}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(e)throw e.error}}}return null},e.prototype.drawImp=function(e){var i=this;t.prototype.drawImp.call(this,e);var n=this.getWidget(),r=n.getPane(),a=r.getChart(),o=n.getBounding(),s=a.getXAxisPane().getAxisComponent(),l=r.getAxisComponent(),c=a.getChartStore(),u=c.getDataList(),d=c.getTimeScaleStore(),h=d.getVisibleRange(),p=c.getIndicatorStore().getInstances(r.getId()),f=c.getStyles().indicator;e.save(),p.forEach(function(t){var n;if(t.visible){t.zLevel<0?e.globalCompositeOperation="destination-over":e.globalCompositeOperation="source-over";var r=!1;if(null!==t.draw&&(e.save(),r=null!==(n=t.draw({ctx:e,kLineDataList:u,indicator:t,visibleRange:h,bounding:o,barSpace:d.getBarSpace(),defaultStyles:f,xAxis:s,yAxis:l}))&&void 0!==n&&n,e.restore()),!r){var a=t.result,c=[];i.eachChildren(function(n,r){var d,h,p,v=r.halfGapBar,g=n.dataIndex,m=n.x,y=s.convertToPixel(g-1),b=s.convertToPixel(g+1),x=null!==(d=a[g-1])&&void 0!==d?d:null,_=null!==(h=a[g])&&void 0!==h?h:null,w=null!==(p=a[g+1])&&void 0!==p?p:null,C={x:y},S={x:m},k={x:b};t.figures.forEach(function(t){var e=t.key,i=null===x||void 0===x?void 0:x[e];Tt(i)&&(C[e]=l.convertToPixel(i));var n=null===_||void 0===_?void 0:_[e];Tt(n)&&(S[e]=l.convertToPixel(n));var r=null===w||void 0===w?void 0:w[e];Tt(r)&&(k[e]=l.convertToPixel(r))}),Ut(u,t,g,f,function(t,n,a){var u,d,h;if(Mt(null===_||void 0===_?void 0:_[t.key])){var p=S[t.key],f=null===(u=t.attrs)||void 0===u?void 0:u.call(t,{data:{prev:x,current:_,next:w},coordinate:{prev:C,current:S,next:k},bounding:o,barSpace:r,xAxis:s,yAxis:l});if(!Mt(f))switch(t.type){case"circle":f={x:m,y:p,r:Math.max(1,v)};break;case"rect":case"bar":var g=null!==(d=t.baseValue)&&void 0!==d?d:l.getRange().from,y=l.convertToPixel(g),b=Math.abs(y-p);g!==(null===_||void 0===_?void 0:_[t.key])&&(b=Math.max(1,b));var A=void 0;A=p>y?y:p,f={x:m-v,y:A,width:Math.max(1,2*v),height:b};break;case"line":Mt(c[a])||(c[a]=[]),Tt(S[t.key])&&Tt(k[t.key])&&c[a].push({coordinates:[{x:S.x,y:S[t.key]},{x:k.x,y:k[t.key]}],styles:n});break}var T=t.type;Mt(f)&&"line"!==T&&(null===(h=i.createFigure({name:"bar"===T?"rect":T,attrs:f,styles:n}))||void 0===h||h.draw(e))}})}),c.forEach(function(t){if(t.length>1){for(var n=[{coordinates:[t[0].coordinates[0],t[0].coordinates[1]],styles:t[0].styles}],r=1;r0,S=_.length>0;if(C||S){var k=q(p.classifyTooltipIcons(w),3),A=k[0],T=k[1],M=k[2];if(g=p.drawStandardTooltipIcons(t,r,A,m,e,a.name,c,g,d),C){var I=b;x.length>0&&(I="".concat(I).concat(x)),g=p.drawStandardTooltipLegends(t,[{title:{text:"",color:v.color},value:{text:I,color:v.color}}],m,c,g,d,v)}g=p.drawStandardTooltipIcons(t,r,T,m,e,a.name,c,g,d),S&&(g=p.drawStandardTooltipLegends(t,_,m,c,g,d,f.text)),g=p.drawStandardTooltipIcons(t,r,M,m,e,a.name,c,g,d),u=m.y+g}})}return u},e.prototype.drawStandardTooltipIcons=function(t,e,i,n,r,a,o,s,l){var c=this;if(i.length>0){var u=0,d=0;i.forEach(function(e){var i=e.marginLeft,n=void 0===i?0:i,r=e.marginTop,a=void 0===r?0:r,o=e.marginRight,s=void 0===o?0:o,l=e.marginBottom,c=void 0===l?0:l,h=e.paddingLeft,p=void 0===h?0:h,f=e.paddingTop,v=void 0===f?0:f,g=e.paddingRight,m=void 0===g?0:g,y=e.paddingBottom,b=void 0===y?0:y,x=e.size,_=e.fontFamily,w=e.icon;t.font=$t(x,"normal",_),u+=n+p+t.measureText(w).width+m+s,d=Math.max(d,a+v+x+b+c)}),n.x+u>l?(n.x=o,n.y+=s,s=d):s=Math.max(s,d),i.forEach(function(i){var o,s=i.marginLeft,l=void 0===s?0:s,u=i.marginTop,d=void 0===u?0:u,h=i.marginRight,p=void 0===h?0:h,f=i.paddingLeft,v=void 0===f?0:f,g=i.paddingTop,m=void 0===g?0:g,y=i.paddingRight,b=void 0===y?0:y,x=i.paddingBottom,_=void 0===x?0:x,w=i.color,C=i.activeColor,S=i.size,k=i.fontFamily,A=i.icon,T=i.backgroundColor,M=i.activeBackgroundColor,I=(null===e||void 0===e?void 0:e.paneId)===r&&(null===e||void 0===e?void 0:e.indicatorName)===a&&(null===e||void 0===e?void 0:e.iconId)===i.id;null===(o=c.createFigure({name:"text",attrs:{text:A,x:n.x+l,y:n.y+d},styles:{paddingLeft:v,paddingTop:m,paddingRight:b,paddingBottom:_,color:I?C:w,size:S,family:k,backgroundColor:I?M:T}},{mouseClickEvent:c._boundIconClickEvent({paneId:r,indicatorName:a,iconId:i.id}),mouseMoveEvent:c._boundIconMouseMoveEvent({paneId:r,indicatorName:a,iconId:i.id})}))||void 0===o||o.draw(t),n.x+=l+v+t.measureText(A).width+b+p})}return s},e.prototype.drawStandardTooltipLegends=function(t,e,i,n,r,a,o){var s=this;if(e.length>0){var l=o.marginLeft,c=o.marginTop,u=o.marginRight,d=o.marginBottom,h=o.size,p=o.family,f=o.weight;t.font=$t(h,f,p),e.forEach(function(e){var o,v,g=e.title,m=e.value,y=t.measureText(g.text).width,b=t.measureText(m.text).width,x=y+b,_=c+h+d;i.x+l+x+u>a?(i.x=n,i.y+=r,r=_):r=Math.max(r,_),g.text.length>0&&(null===(o=s.createFigure({name:"text",attrs:{x:i.x+l,y:i.y+c,text:g.text},styles:{color:g.color,size:h,family:p,weight:f}}))||void 0===o||o.draw(t)),null===(v=s.createFigure({name:"text",attrs:{x:i.x+l+y,y:i.y+c,text:m.text},styles:{color:m.color,size:h,family:p,weight:f}}))||void 0===v||v.draw(t),i.x+=l+x+u})}return r},e.prototype.isDrawTooltip=function(t,e){var i=e.showRule;return i===z.Always||i===z.FollowCross&&Et(t.paneId)},e.prototype.getIndicatorTooltipData=function(t,e,i,n,r,a,o){var s,l,c=o.tooltip,u=c.showName?i.shortName:"",d="",h=i.calcParams;h.length>0&&c.showParams&&(d="(".concat(h.join(","),")"));var p={name:u,calcParamsText:d,values:[],icons:c.icons},f=e.dataIndex,v=null!==(s=i.result)&&void 0!==s?s:[],g=[];if(i.visible){var m=null!==(l=v[f])&&void 0!==l?l:{};Ut(t,i,f,o,function(t,e){var o;if(Et(t.title)){var s=e.color,l=null!==(o=m[t.key])&&void 0!==o?o:c.defaultValue;Tt(l)&&(l=Nt(l,i.precision),i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a)),g.push({title:{text:t.title,color:s},value:{text:l,color:s}})}}),p.values=g}if(null!==i.createTooltipDataSource){var y=this.getWidget(),b=y.getPane(),x=b.getChart().getChartStore(),_=i.createTooltipDataSource({kLineDataList:t,indicator:i,visibleRange:x.getTimeScaleStore().getVisibleRange(),bounding:y.getBounding(),crosshair:e,defaultStyles:o,xAxis:b.getChart().getXAxisPane().getAxisComponent(),yAxis:b.getAxisComponent()}),w=_.name,C=_.calcParamsText,S=_.values,k=_.icons;if(Et(w)&&c.showName&&(p.name=w),Et(C)&&c.showParams&&(p.calcParamsText=C),Mt(k)&&(p.icons=k),Mt(S)&&i.visible){var A=[],T=o.tooltip.text.color;S.forEach(function(t){var e,o={text:"",color:T};At(t.title)?o=t.title:o.text=t.title;var s={text:"",color:T};if(At(t.value)?s=t.value:s.text=null!==(e=t.value)&&void 0!==e?e:c.defaultValue,Tt(s.text)){var l=Nt(s.text,i.precision);i.shouldFormatBigNumber&&(l=n.formatBigNumber(l)),l=Wt(zt(l,r),a),s.text=l}A.push({title:o,value:s})}),p.values=A}}return p},e.prototype.classifyTooltipIcons=function(t){var e=[],i=[],n=[];return t.forEach(function(t){switch(t.position){case V.Left:e.push(t);break;case V.Middle:i.push(t);break;case V.Right:n.push(t);break}}),[e,i,n]},e}(kn),Pn=function(t){function e(e){var i=t.call(this,e)||this;return i._initEvent(),i}return B(e,t),e.prototype._initEvent=function(){var t=this,e=this.getWidget().getPane(),i=e.getId(),n=e.getChart().getChartStore().getOverlayStore();this.registerEvent("mouseMoveEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;o.isStart()&&(n.updateProgressInstanceInfo(i),s=i);var l=o.points.length-1,c="".concat(ee,"point_").concat(l);return o.isDrawing()&&s===i&&(o.eventMoveForDrawing(t._coordinateToPoint(a.instance,e)),null===(r=o.onDrawing)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))),t._figureMouseMoveEvent(o,1,c,l,0)(e)}return n.setHoverInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseClickEvent",function(e){var r,a,o=n.getProgressInstanceInfo();if(null!==o){var s=o.instance,l=o.paneId;s.isStart()&&(n.updateProgressInstanceInfo(i,!0),l=i);var c=s.points.length-1,u="".concat(ee,"point_").concat(c);return s.isDrawing()&&l===i&&(s.eventMoveForDrawing(t._coordinateToPoint(s,e)),null===(r=s.onDrawing)||void 0===r||r.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)),s.nextStep(),s.isDrawing()||(n.progressInstanceComplete(),null===(a=s.onDrawEnd)||void 0===a||a.call(s,X({overlay:s,figureKey:u,figureIndex:c},e)))),t._figureMouseClickEvent(s,1,u,c,0)(e)}return n.setClickInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1},e),!1}).registerEvent("mouseDoubleClickEvent",function(e){var r,a=n.getProgressInstanceInfo();if(null!==a){var o=a.instance,s=a.paneId;if(o.isDrawing()&&s===i&&(o.forceComplete(),!o.isDrawing())){n.progressInstanceComplete();var l=o.points.length-1,c="".concat(ee,"point_").concat(l);null===(r=o.onDrawEnd)||void 0===r||r.call(o,X({overlay:o,figureKey:c,figureIndex:l},e))}var u=o.points.length-1;return t._figureMouseClickEvent(o,1,"".concat(ee,"point_").concat(u),u,0)(e)}return!1}).registerEvent("mouseRightClickEvent",function(e){var i=n.getProgressInstanceInfo();if(null!==i){var r=i.instance;if(r.isDrawing()){var a=r.points.length-1;return t._figureMouseRightClickEvent(r,1,"".concat(ee,"point_").concat(a),a,0)(e)}}return!1}).registerEvent("mouseUpEvent",function(t){var e,r=n.getPressedInstanceInfo(),a=r.instance,o=r.figureIndex,s=r.figureKey;return null!==a&&(null===(e=a.onPressedMoveEnd)||void 0===e||e.call(a,X({overlay:a,figureKey:s,figureIndex:o},t))),n.setPressedInstanceInfo({paneId:i,instance:null,figureType:0,figureKey:"",figureIndex:-1,attrsIndex:-1}),!1}).registerEvent("pressedMouseMoveEvent",function(e){var i,r,a=n.getPressedInstanceInfo(),o=a.instance,s=a.figureType,l=a.figureIndex,c=a.figureKey;if(null!==o){if(!o.lock&&(null===(r=null===(i=o.onPressedMoving)||void 0===i?void 0:i.call(o,X({overlay:o,figureIndex:l,figureKey:c},e)))||void 0===r||!r)){var u=t._coordinateToPoint(o,e);1===s?o.eventPressedPointMove(u,l):o.eventPressedOtherMove(u,t.getWidget().getPane().getChart().getChartStore().getTimeScaleStore())}return!0}return!1})},e.prototype._createFigureEvents=function(t,e,i,n,r,a){var o;if(!t.isDrawing()){var s=[];if(Mt(a)&&(It(a)?a&&(s=qt()):s=a),0===s.length)return{mouseMoveEvent:this._figureMouseMoveEvent(t,e,i,n,r),mouseDownEvent:this._figureMouseDownEvent(t,e,i,n,r),mouseClickEvent:this._figureMouseClickEvent(t,e,i,n,r),mouseRightClickEvent:this._figureMouseRightClickEvent(t,e,i,n,r),mouseDoubleClickEvent:this._figureMouseDoubleClickEvent(t,e,i,n,r)};o={},s.includes("mouseMoveEvent")||s.includes("touchMoveEvent")||(o.mouseMoveEvent=this._figureMouseMoveEvent(t,e,i,n,r)),s.includes("mouseDownEvent")||s.includes("touchStartEvent")||(o.mouseDownEvent=this._figureMouseDownEvent(t,e,i,n,r)),s.includes("mouseClickEvent")||s.includes("tapEvent")||(o.mouseClickEvent=this._figureMouseClickEvent(t,e,i,n,r)),s.includes("mouseDoubleClickEvent")||s.includes("doubleTapEvent")||(o.mouseDoubleClickEvent=this._figureMouseDoubleClickEvent(t,e,i,n,r)),s.includes("mouseRightClickEvent")||(o.mouseRightClickEvent=this._figureMouseRightClickEvent(t,e,i,n,r))}return o},e.prototype._figureMouseMoveEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();return l.setHoverInstanceInfo({paneId:s.getId(),instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDownEvent=function(t,e,i,n,r){var a=this;return function(o){var s,l=a.getWidget().getPane(),c=l.getId(),u=l.getChart().getChartStore().getOverlayStore();return t.startPressedMove(a._coordinateToPoint(t,o)),null===(s=t.onPressedMoveStart)||void 0===s||s.call(t,X({overlay:t,figureIndex:n,figureKey:i},o)),u.setPressedInstanceInfo({paneId:c,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r}),!0}},e.prototype._figureMouseClickEvent=function(t,e,i,n,r){var a=this;return function(o){var s=a.getWidget().getPane(),l=s.getId(),c=s.getChart().getChartStore().getOverlayStore();return c.setClickInstanceInfo({paneId:l,instance:t,figureType:e,figureKey:i,figureIndex:n,attrsIndex:r},o),!0}},e.prototype._figureMouseDoubleClickEvent=function(t,e,i,n,r){return function(e){var r;return null===(r=t.onDoubleClick)||void 0===r||r.call(t,X(X({},e),{figureIndex:n,figureKey:i,overlay:t})),!0}},e.prototype._figureMouseRightClickEvent=function(t,e,i,n,r){var a=this;return function(e){var r,o;if(null===(o=null===(r=t.onRightClick)||void 0===r?void 0:r.call(t,X({overlay:t,figureIndex:n,figureKey:i},e)))||void 0===o||!o){var s=a.getWidget().getPane(),l=s.getChart().getChartStore().getOverlayStore();l.removeInstance(t)}return!0}},e.prototype._coordinateToPoint=function(t,e){var i,n={},r=this.getWidget().getPane(),a=r.getChart(),o=r.getId(),s=a.getChartStore().getTimeScaleStore();if(this.coordinateToPointTimestampDataIndexFlag()){var l=a.getXAxisPane().getAxisComponent(),c=l.convertFromPixel(e.x),u=null!==(i=s.dataIndexToTimestamp(c))&&void 0!==i?i:void 0;n.dataIndex=c,n.timestamp=u}if(this.coordinateToPointValueFlag()){var d=r.getAxisComponent(),h=d.convertFromPixel(e.y);if(t.mode!==Gt.Normal&&o===Vi.CANDLE&&Tt(n.dataIndex)){var p=s.getDataByDataIndex(n.dataIndex);if(null!==p){var f=t.modeSensitivity;if(h>p.high)if(t.mode===Gt.WeakMagnet){var v=d.convertToPixel(p.high),g=d.convertFromPixel(v-f);hg&&(h=p.low)}else h=p.low;else{var y=Math.max(p.open,p.close),b=Math.min(p.open,p.close);h=h>y?h-y0){var m=(new Array).concat(this.getFigures(e,g,i,n,r,s,l,a,c,u,d));this.drawFigures(t,e,m,c)}this.drawDefaultFigures(t,e,g,i,r,a,o,s,l,c,u,d,h,p)},e.prototype.drawFigures=function(t,e,i,n){var r=this;i.forEach(function(i,a){var o=i.type,s=i.styles,l=i.attrs,c=i.ignoreEvent,u=[].concat(l);u.forEach(function(l,u){var d,h,p,f=r._createFigureEvents(e,2,null!==(d=i.key)&&void 0!==d?d:"",a,u,c),v=X(X(X({},n[o]),null===(h=e.styles)||void 0===h?void 0:h[o]),s);null===(p=r.createFigure({name:o,attrs:l,styles:v},f))||void 0===p||p.draw(t)})})},e.prototype.getCompleteOverlays=function(t,e){return t.getInstances(e)},e.prototype.getProgressOverlay=function(t,e){return t.paneId===e?t.instance:null},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createPointFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e.prototype.drawDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p){var f,v,g=this;if(e.needDefaultPointFigure&&((null===(f=h.instance)||void 0===f?void 0:f.id)===e.id&&0!==h.figureType||(null===(v=p.instance)||void 0===v?void 0:v.id)===e.id&&0!==p.figureType)){var m=e.styles,y=X(X({},c.point),null===m||void 0===m?void 0:m.point);i.forEach(function(i,n){var r,a,o,s=i.x,l=i.y,c=y.radius,u=y.color,d=y.borderColor,p=y.borderSize;(null===(r=h.instance)||void 0===r?void 0:r.id)===e.id&&1===h.figureType&&h.figureIndex===n&&(c=y.activeRadius,u=y.activeColor,d=y.activeBorderColor,p=y.activeBorderSize),null===(a=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c+p},styles:{color:d}},g._createFigureEvents(e,1,"".concat(ee,"point_").concat(n),n,0)))||void 0===a||a.draw(t),null===(o=g.createFigure({name:"circle",attrs:{x:s,y:l,r:c},styles:{color:u}}))||void 0===o||o.draw(t)})}},e}(kn),Ln=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._gridView=new An(n),n._indicatorView=new In(n),n._crosshairLineView=new En(n),n._tooltipView=n.createTooltipView(),n._overlayView=new Pn(n),n.addChild(n._tooltipView),n.addChild(n._overlayView),n.getContainer().style.cursor="crosshair",n.registerEvent("mouseMoveEvent",function(){return i.getChart().getChartStore().getTooltipStore().setActiveIcon(),!1}),n}return B(e,t),e.prototype.getName=function(){return ji.MAIN},e.prototype.updateMain=function(t){this.updateMainContent(t),this._indicatorView.draw(t),this._gridView.draw(t)},e.prototype.createTooltipView=function(){return new Dn(this)},e.prototype.updateMainContent=function(t){},e.prototype.updateOverlay=function(t){this._overlayView.draw(t),this._crosshairLineView.draw(t),this._tooltipView.draw(t)},e}(en),Rn=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._ripplePoint=e.createFigure({name:"circle",attrs:{x:0,y:0,r:0},styles:{style:"fill"}}),e._animationFrameTime=0,e._animation=new le({iterationCount:1/0}).doFrame(function(t){e._animationFrameTime=t;var i=e.getWidget().getPane();i.getChart().updatePane(0,i.getId())}),e}return B(e,t),e.prototype.drawImp=function(t){var e,i,n,r=this.getWidget(),a=r.getPane(),o=a.getChart(),s=o.getDataList(),l=s.length-1,c=r.getBounding(),u=a.getAxisComponent(),d=o.getStyles().candle.area,h=[],p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER,v=null;if(this.eachChildren(function(t){var e=t.data,i=t.x,n=null===e||void 0===e?void 0:e[d.value];if(Tt(n)){var r=u.convertToPixel(n);f===Number.MIN_SAFE_INTEGER&&(f=i),h.push({x:i,y:r}),p=Math.min(p,r),t.dataIndex===l&&(v={x:i,y:r})}}),h.length>0){null===(e=this.createFigure({name:"line",attrs:{coordinates:h},styles:{color:d.lineColor,size:d.lineSize,smooth:d.smooth}}))||void 0===e||e.draw(t);var g=d.backgroundColor,m=void 0;if(St(g)){var y=t.createLinearGradient(0,c.height,0,p);try{g.forEach(function(t){var e=t.offset,i=t.color;y.addColorStop(e,i)})}catch(_){}m=y}else m=g;t.fillStyle=m,t.beginPath(),t.moveTo(f,c.height),t.lineTo(h[0].x,h[0].y),bi(t,h,d.smooth),t.lineTo(h[h.length-1].x,c.height),t.closePath(),t.fill()}var b=d.point;if(b.show&&Mt(v)){null===(i=this.createFigure({name:"circle",attrs:{x:v.x,y:v.y,r:b.radius},styles:{style:"fill",color:b.color}}))||void 0===i||i.draw(t);var x=b.rippleRadius;b.animation&&(x=b.radius+this._animationFrameTime/b.animationDuration*(b.rippleRadius-b.radius),this._animation.setDuration(b.animationDuration).start()),null===(n=this._ripplePoint)||void 0===n||n.setAttrs({x:v.x,y:v.y,r:x}).setStyles({style:"fill",color:b.rippleColor}).draw(t)}else this.stopAnimation()},e.prototype.stopAnimation=function(){this._animation.stop()},e}(Tn),Fn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e=this.getWidget(),i=e.getPane(),n=i.getChart().getChartStore(),r=n.getStyles().candle.priceMark,a=r.high,o=r.low;if(r.show&&(a.show||o.show)){var s=n.getThousandsSeparator(),l=n.getDecimalFoldThreshold(),c=n.getPrecision(),u=i.getAxisComponent(),d=Number.MIN_SAFE_INTEGER,h=0,p=Number.MAX_SAFE_INTEGER,f=0;this.eachChildren(function(t){var e=t.data,i=t.x;Mt(e)&&(de.low&&(p=e.low,f=i))});var v=u.convertToPixel(d),g=u.convertToPixel(p);a.show&&d!==Number.MIN_SAFE_INTEGER&&this._drawMark(t,Wt(zt(Nt(d,c.price),s),l),{x:h,y:v},vp/2?(l=d-5,c=l-r.textOffset,u="right"):(l=d+5,u="left",c=l+r.textOffset);var f=h+n[1];null===(o=this.createFigure({name:"line",attrs:{coordinates:[{x:d,y:h},{x:d,y:f},{x:l,y:f}]},styles:{color:r.color}}))||void 0===o||o.draw(t),null===(s=this.createFigure({name:"text",attrs:{x:c,y:f,text:e,align:u,baseline:"middle"},styles:{color:r.color,size:r.textSize,family:r.textFamily,weight:r.textWeight}}))||void 0===s||s.draw(t)},e}(Tn),Bn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.line;if(o.show&&s.show&&l.show){var c=n.getAxisComponent(),u=a.getDataList(),d=u[u.length-1];if(null!=d){var h=d.close,p=d.open,f=c.convertToNicePixel(h),v=void 0;v=h>p?s.upColor:h0&&(x=this.drawStandardTooltipLegends(t,C,_,d,x,p,b)),x=this.drawStandardTooltipIcons(t,r,T,_,i,"",d,x,p)}return _.y+x},e.prototype._drawRectTooltip=function(t,e,i,n,r,a,o,s,l,c,u,d,h,p,f,v){var g,m,y,b,x,_=this,w=v.candle,C=v.indicator,S=w.tooltip,k=C.tooltip;if(h||p){var A=null!==(g=a.dataIndex)&&void 0!==g?g:0,T=this._getCandleTooltipLegends({prev:null!==(m=e[A-1])&&void 0!==m?m:null,current:a.kLineData,next:null!==(y=e[A+1])&&void 0!==y?y:null},o,s,l,c,u,d,w),M=S.offsetLeft,I=S.offsetTop,E=S.offsetRight,D=S.offsetBottom,P=S.text,L=P.marginLeft,R=P.marginRight,F=P.marginTop,B=P.marginBottom,N=P.size,z=P.weight,W=P.family,V=S.rect,H=V.position,Y=V.paddingLeft,X=V.paddingRight,U=V.paddingTop,G=V.paddingBottom,j=V.offsetLeft,q=V.offsetRight,Z=V.offsetTop,J=V.offsetBottom,Q=V.borderSize,tt=V.borderRadius,et=V.borderColor,it=V.color,nt=0,rt=0,at=0;h&&(t.font=$t(N,z,W),T.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+L+R;nt=Math.max(nt,a)}),at+=(B+F+N)*T.length);var ot=k.text,st=ot.marginLeft,lt=ot.marginRight,ct=ot.marginTop,ut=ot.marginBottom,dt=ot.size,ht=ot.weight,pt=ot.family,ft=[];if(p&&(t.font=$t(dt,ht,pt),i.forEach(function(i){var n,r=null!==(n=_.getIndicatorTooltipData(e,a,i,c,u,d,C).values)&&void 0!==n?n:[];ft.push(r),r.forEach(function(e){var i=e.title,n=e.value,r="".concat(i.text).concat(n.text),a=t.measureText(r).width+st+lt;nt=Math.max(nt,a),at+=ct+ut+dt})})),rt+=nt,0!==rt&&0!==at){rt+=2*Q+Y+X,at+=2*Q+U+G;var vt=n.width/2,gt=H===$.Pointer&&a.paneId===Vi.CANDLE,mt=(null!==(b=a.realX)&&void 0!==b?b:0)>vt,yt=0;if(gt){var bt=a.realX;yt=mt?bt-q-rt:bt+j}else mt?(yt=j+M,v.yAxis.inside&&v.yAxis.position===K.Left&&(yt+=r.width)):(yt=n.width-q-rt-E,v.yAxis.inside&&v.yAxis.position===K.Right&&(yt-=r.width));var xt=f+Z;if(gt){var _t=a.y;xt=_t-at/2,xt+at>n.height-J-D&&(xt=n.height-J-at-D),xt1){var c="{".concat(l[1],"}");o.text=o.text.replace(c,null!==(e=x[c])&&void 0!==e?e:p.defaultValue),"{change}"===c&&(o.color=0===m?s.priceMark.last.noChangeColor:m>0?s.priceMark.last.upColor:s.priceMark.last.downColor)}return{title:a,value:o}})},e}(Dn),$n=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._candleBarView=new Mn(n),n._candleAreaView=new Rn(n),n._candleHighLowPriceView=new Fn(n),n._candleLastPriceLineView=new Bn(n),n.addChild(n._candleBarView),n}return B(e,t),e.prototype.updateMainContent=function(t){var e=this.getPane().getChart().getStyles().candle;e.type!==H.Area?(this._candleBarView.draw(t),this._candleHighLowPriceView.draw(t),this._candleAreaView.stopAnimation()):this._candleAreaView.draw(t),this._candleLastPriceLineView.draw(t)},e.prototype.createTooltipView=function(){return new Vn(this)},e}(Ln),Hn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i,n=this,r=this.getWidget(),a=r.getPane(),o=r.getBounding(),s=a.getAxisComponent(),l=this.getAxisStyles(a.getChart().getStyles());if(l.show){l.axisLine.show&&(null===(e=this.createFigure({name:"line",attrs:this.createAxisLine(o,l),styles:l.axisLine}))||void 0===e||e.draw(t));var c=s.getTicks();if(l.tickLine.show){var u=this.createTickLines(c,o,l);u.forEach(function(e){var i;null===(i=n.createFigure({name:"line",attrs:e,styles:l.tickLine}))||void 0===i||i.draw(t)})}if(l.tickText.show){var d=this.createTickTexts(c,o,l);null===(i=this.createFigure({name:"text",attrs:d,styles:l.tickText}))||void 0===i||i.draw(t)}}},e}(kn),Kn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.yAxis},e.prototype.createAxisLine=function(t,e){var i,n=this.getWidget().getPane().getAxisComponent(),r=e.axisLine.size;return i=n.isFromZero()?0:t.width-r,{coordinates:[{x:i,y:0},{x:i,y:t.height}]}},e.prototype.createTickLines=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=0,s=0;return n.isFromZero()?(o=0,r.show&&(o+=r.size),s=o+a.length):(o=e.width,r.show&&(o-=r.size),s=o-a.length),t.map(function(t){return{coordinates:[{x:o,y:t.coord},{x:s,y:t.coord}]}})},e.prototype.createTickTexts=function(t,e,i){var n=this.getWidget().getPane().getAxisComponent(),r=i.axisLine,a=i.tickLine,o=i.tickText,s=0;n.isFromZero()?(s=o.marginStart,r.show&&(s+=r.size),a.show&&(s+=a.length)):(s=e.width-o.marginEnd,r.show&&(s-=r.size),a.show&&(s-=a.length));var l=this.getWidget().getPane().getAxisComponent().isFromZero()?"left":"right";return t.map(function(t){return{x:s,y:t.coord,text:t.text,align:l,baseline:"middle"}})},e}(Hn),Yn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=n.getChart().getChartStore(),o=a.getStyles().candle.priceMark,s=o.last,l=s.text;if(o.show&&s.show&&l.show){var c=a.getPrecision(),u=n.getAxisComponent(),d=a.getDataList(),h=d[d.length-1];if(Mt(h)){var p=h.close,f=h.open,v=u.convertToNicePixel(p),g=void 0;g=p>f?s.upColor:p1&&p.unshift({type:"rect",attrs:{x:0,y:g,width:i.width,height:m-g},ignoreEvent:!0})}return p},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createYAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Pn),Gn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.drawImp=function(t){var e,i=this.getWidget(),n=i.getPane(),r=i.getBounding(),a=i.getPane().getChart().getChartStore(),o=a.getTooltipStore().getCrosshair(),s=a.getStyles().crosshair;if(Et(o.paneId)&&this.compare(o,n.getId())&&s.show){var l=this.getDirectionStyles(s),c=l.text;if(l.show&&c.show){var u=n.getAxisComponent(),d=this.getText(o,a,u);t.font=$t(c.size,c.weight,c.family),null===(e=this.createFigure({name:"text",attrs:this.getTextAttrs(d,t.measureText(d).width,o,r,u,c),styles:c}))||void 0===e||e.draw(t)}}},e.prototype.compare=function(t,e){return t.paneId===e},e.prototype.getDirectionStyles=function(t){return t.horizontal},e.prototype.getText=function(t,e,i){var n,r=i,a=i.convertFromPixel(t.y);if(r.getType()===Y.Percentage){var o=e.getVisibleFirstData();n="".concat(((a-o.close)/o.close*100).toFixed(2),"%")}else{var s=e.getIndicatorStore().getInstances(t.paneId),l=0,c=!1;r.isInCandle()?l=e.getPrecision().price:s.forEach(function(t){l=Math.max(t.precision,l),c||(c=t.shouldFormatBigNumber)}),n=Nt(a,l),c&&(n=e.getCustomApi().formatBigNumber(n))}return Wt(zt(n,e.getThousandsSeparator()),e.getDecimalFoldThreshold())},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s,l=r;return l.isFromZero()?(o=0,s="left"):(o=n.width,s="right"),{x:o,y:i.y,text:t,align:s,baseline:"middle"}},e}(kn),jn=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._yAxisView=new Kn(n),n._candleLastPriceLabelView=new Yn(n),n._indicatorLastValueView=new Xn(n),n._overlayYAxisView=new Un(n),n._crosshairHorizontalLabelView=new Gn(n),n.getContainer().style.cursor="ns-resize",n.addChild(n._overlayYAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.Y_AXIS},e.prototype.updateMain=function(t){this._yAxisView.draw(t),this.getPane().getAxisComponent().isInCandle()&&this._candleLastPriceLabelView.draw(t),this._indicatorLastValueView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayYAxisView.draw(t),this._crosshairHorizontalLabelView.draw(t)},e}(en),qn=function(){function t(t){this._range={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._prevRange={from:0,to:0,range:0,realFrom:0,realTo:0,realRange:0},this._ticks=[],this._autoCalcTickFlag=!0,this._parent=t}return t.prototype.getParent=function(){return this._parent},t.prototype.buildTicks=function(t){if(this._autoCalcTickFlag&&(this._range=this.calcRange()),this._prevRange.from!==this._range.from||this._prevRange.to!==this._range.to||t){this._prevRange=this._range;var e=this.optimalTicks(this._calcTicks());return this._ticks=this.createTicks({range:this._range,bounding:this.getSelfBounding(),defaultTicks:e}),!0}return!1},t.prototype.getTicks=function(){return this._ticks},t.prototype.getScrollZoomEnabled=function(){var t;return null===(t=this.getParent().getOptions().axisOptions.scrollZoomEnabled)||void 0===t||t},t.prototype.setRange=function(t){this._autoCalcTickFlag=!1,this._range=t},t.prototype.getRange=function(){return this._range},t.prototype.setAutoCalcTickFlag=function(t){this._autoCalcTickFlag=t},t.prototype.getAutoCalcTickFlag=function(){return this._autoCalcTickFlag},t.prototype._calcTicks=function(){var t=this._range,e=t.realFrom,i=t.realTo,n=t.realRange,r=[];if(n>=0){var a=q(this._calcTickInterval(n),2),o=a[0],s=a[1],l=ve(Math.ceil(e/o)*o,s),c=ve(Math.floor(i/o)*o,s),u=0,d=l;if(0!==o)while(d<=c){var h=d.toFixed(s);r[u]={text:h,coord:0,value:h},++u,d+=o}}return r},t.prototype._calcTickInterval=function(t){var e=fe(t/8),i=ge(e);return[e,i]},t}(),Zn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t,e,i,n,r=this.getParent(),a=r.getChart(),o=a.getChartStore(),s=Number.MAX_SAFE_INTEGER,l=Number.MIN_SAFE_INTEGER,c=[],u=!1,d=Number.MAX_SAFE_INTEGER,h=Number.MIN_SAFE_INTEGER,p=Number.MAX_SAFE_INTEGER,f=o.getIndicatorStore().getInstances(r.getId());f.forEach(function(t){var e,i,n;u||(u=null!==(e=t.shouldOhlc)&&void 0!==e&&e),p=Math.min(p,t.precision),Tt(t.minValue)&&(d=Math.min(d,t.minValue)),Tt(t.maxValue)&&(h=Math.max(h,t.maxValue)),c.push({figures:null!==(i=t.figures)&&void 0!==i?i:[],result:null!==(n=t.result)&&void 0!==n?n:[]})});var v=4,g=this.isInCandle();if(g){var m=o.getPrecision().price;v=p!==Number.MAX_SAFE_INTEGER?Math.min(p,m):m}else p!==Number.MAX_SAFE_INTEGER&&(v=p);var y=o.getVisibleDataList(),b=a.getStyles().candle,x=b.type===H.Area,_=b.area.value,w=g&&!x||!g&&u;y.forEach(function(t){var e=t.dataIndex,i=t.data;if(Mt(i)&&(w&&(s=Math.min(s,i.low),l=Math.max(l,i.high)),g&&x)){var n=i[_];Tt(n)&&(s=Math.min(s,n),l=Math.max(l,n))}c.forEach(function(t){var i,n=t.figures,r=t.result,a=null!==(i=r[e])&&void 0!==i?i:{};n.forEach(function(t){var e=a[t.key];Tt(e)&&(s=Math.min(s,e),l=Math.max(l,e))})})}),s!==Number.MAX_SAFE_INTEGER&&l!==Number.MIN_SAFE_INTEGER?(s=Math.min(d,s),l=Math.max(h,l)):(s=0,l=10);var C,S=this.getType();switch(S){case Y.Percentage:var k=o.getVisibleFirstData();Mt(k)&&Tt(k.close)&&(s=(s-k.close)/k.close*100,l=(l-k.close)/k.close*100),C=Math.pow(10,-2);break;case Y.Log:s=ye(s),l=ye(l),C=.05*be(-v);break;default:C=be(-v)}if(s===l||Math.abs(s-l)=1&&(E/=M);var D=null!==(n=null===I||void 0===I?void 0:I.bottom)&&void 0!==n?n:.1;D>=1&&(D/=M);var P,L,R,F=Math.abs(l-s);return s-=F*D,l+=F*E,F=Math.abs(l-s),S===Y.Log?(P=be(s),L=be(l),R=Math.abs(L-P)):(P=s,L=l,R=F),{from:s,to:l,range:F,realFrom:P,realTo:L,realRange:R}},e.prototype._innerConvertToPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=(t-a)/o;return this.isReverse()?Math.round(s*n):Math.round((1-s)*n)},e.prototype.isInCandle=function(){return this.getParent().getId()===Vi.CANDLE},e.prototype.getType=function(){return this.isInCandle()?this.getParent().getChart().getStyles().yAxis.type:Y.Normal},e.prototype.getPosition=function(){return this.getParent().getChart().getStyles().yAxis.position},e.prototype.isReverse=function(){return!!this.isInCandle()&&this.getParent().getChart().getStyles().yAxis.reverse},e.prototype.isFromZero=function(){var t=this.getParent().getChart().getStyles().yAxis,e=t.inside;return t.position===K.Left&&e||t.position===K.Right&&!e},e.prototype.optimalTicks=function(t){var e,i,n=this,r=this.getParent(),a=null!==(i=null===(e=r.getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,o=r.getChart().getChartStore(),s=o.getCustomApi(),l=[],c=this.getType(),u=o.getIndicatorStore().getInstances(r.getId()),d=o.getThousandsSeparator(),h=o.getDecimalFoldThreshold(),p=0,f=!1;this.isInCandle()?p=o.getPrecision().price:u.forEach(function(t){p=Math.max(p,t.precision),f||(f=t.shouldFormatBigNumber)});var v,g=o.getStyles().xAxis.tickText.size;return t.forEach(function(t){var e,i=t.value,r=n._innerConvertToPixel(+i);switch(c){case Y.Percentage:e="".concat(Nt(i,2),"%");break;case Y.Log:r=n._innerConvertToPixel(ye(+i)),e=Nt(i,p);break;default:e=Nt(i,p),f&&(e=s.formatBigNumber(i));break}e=Wt(zt(e,d),h);var o=Tt(v);r>g&&r2*g||!o)&&(l.push({text:e,coord:r,value:i}),v=r)}),l},e.prototype.getAutoSize=function(){var t=this.getParent(),e=t.getChart(),i=e.getStyles(),n=i.yAxis,r=n.size;if("auto"!==r)return r;var a=e.getChartStore(),o=a.getCustomApi(),s=0;if(n.show&&(n.axisLine.show&&(s+=n.axisLine.size),n.tickLine.show&&(s+=n.tickLine.length),n.tickText.show)){var l=0;this.getTicks().forEach(function(t){l=Math.max(l,Ht(t.text,n.tickText.size,n.tickText.weight,n.tickText.family))}),s+=n.tickText.marginStart+n.tickText.marginEnd+l}var c=i.crosshair,u=0;if(c.show&&c.horizontal.show&&c.horizontal.text.show){var d=a.getIndicatorStore().getInstances(t.getId()),h=0,p=!1;d.forEach(function(t){h=Math.max(t.precision,h),p||(p=t.shouldFormatBigNumber)});var f=2;if(this.getType()!==Y.Percentage)if(this.isInCandle()){var v=a.getPrecision().price,g=i.indicator.lastValueMark;f=g.show&&g.text.show?Math.max(h,v):v}else f=h;var m=Nt(this.getRange().to,f);p&&(m=o.formatBigNumber(m)),m=Wt(m,a.getDecimalFoldThreshold()),u+=c.horizontal.text.paddingLeft+c.horizontal.text.paddingRight+2*c.horizontal.text.borderSize+Ht(m,c.horizontal.text.size,c.horizontal.text.weight,c.horizontal.text.family)}return Math.max(s,u)},e.prototype.getSelfBounding=function(){return this.getParent().getYAxisWidget().getBounding()},e.prototype.convertFromPixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.getRange(),a=r.from,o=r.range,s=this.isReverse()?t/n:1-t/n,l=s*o+a;switch(this.getType()){case Y.Percentage:var c=this.getParent().getChart().getChartStore().getVisibleFirstData();return Mt(c)&&Tt(c.close)?c.close*l/100+c.close:0;case Y.Log:return be(l);default:return l}},e.prototype.convertToRealValue=function(t){var e=t;return this.getType()===Y.Log&&(e=be(t)),e},e.prototype.convertToPixel=function(t){var e=t;switch(this.getType()){case Y.Percentage:var i=this.getParent().getChart().getChartStore().getVisibleFirstData();Mt(i)&&Tt(i.close)&&(e=(t-i.close)/i.close*100);break;case Y.Log:e=ye(t);break;default:e=t}return this._innerConvertToPixel(e)},e.prototype.convertToNicePixel=function(t){var e,i,n=null!==(i=null===(e=this.getParent().getYAxisWidget())||void 0===e?void 0:e.getBounding().height)&&void 0!==i?i:0,r=this.convertToPixel(t);return Math.round(Math.max(.05*n,Math.min(r,.98*n)))},e.extend=function(t){var i=function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return B(i,e),i.prototype.createTicks=function(e){return t.createTicks(e)},i}(e);return i},e}(qn),Jn={name:"default",createTicks:function(t){var e=t.defaultTicks;return e}},Qn={default:Zn.extend(Jn)};function tr(t){var e;return null!==(e=Qn[t])&&void 0!==e?e:Qn.default}var er=function(){function t(t,e,i,n){this._bounding=Qi(),this._chart=i,this._id=n,this._init(t,e)}return t.prototype._init=function(t,e){this._rootContainer=t,this._container=he("div",{width:"100%",margin:"0",padding:"0",position:"relative",overflow:"hidden",boxSizing:"border-box"}),null!==e?t.insertBefore(this._container,e):t.appendChild(this._container)},t.prototype.getContainer=function(){return this._container},t.prototype.getId=function(){return this._id},t.prototype.getChart=function(){return this._chart},t.prototype.getBounding=function(){return this._bounding},t.prototype.update=function(t){this._bounding.height!==this._container.clientHeight&&(this._container.style.height="".concat(this._bounding.height,"px")),this.updateImp(null!==t&&void 0!==t?t:3,this._container,this._bounding)},t.prototype.destroy=function(){this._rootContainer.removeChild(this._container)},t}(),ir=function(t){function e(e,i,n,r,a){var o=t.call(this,e,i,n,r)||this;o._yAxisWidget=null,o._options={minHeight:zi,dragEnabled:!0,gap:{top:.2,bottom:.1},axisOptions:{name:"default",scrollZoomEnabled:!0}};var s=o.getContainer();return o._mainWidget=o.createMainWidget(s),o._yAxisWidget=o.createYAxisWidget(s),o.setOptions(a),o}return B(e,t),e.prototype.setOptions=function(t){var e,i,n,r,a,o=null===(e=t.axisOptions)||void 0===e?void 0:e.name;return(this._options.axisOptions.name!==o&&Et(o)||!Mt(this._axis))&&(this._axis=this.createAxisComponent(null!==o&&void 0!==o?o:"default")),wt(this._options,t),this.getId()===Vi.X_AXIS?(r=this.getMainWidget().getContainer(),a="ew-resize"):(r=this.getYAxisWidget().getContainer(),a="ns-resize"),null===(n=null===(i=t.axisOptions)||void 0===i?void 0:i.scrollZoomEnabled)||void 0===n||n?r.style.cursor=a:r.style.cursor="default",this},e.prototype.getOptions=function(){return this._options},e.prototype.getAxisComponent=function(){return this._axis},e.prototype.setBounding=function(t,e,i){var n,r;wt(this.getBounding(),t);var a={};return Mt(t.height)&&(a.height=t.height),Mt(t.top)&&(a.top=t.top),this._mainWidget.setBounding(a),null===(n=this._yAxisWidget)||void 0===n||n.setBounding(a),Mt(e)&&this._mainWidget.setBounding(e),Mt(i)&&(null===(r=this._yAxisWidget)||void 0===r||r.setBounding(i)),this},e.prototype.getMainWidget=function(){return this._mainWidget},e.prototype.getYAxisWidget=function(){return this._yAxisWidget},e.prototype.updateImp=function(t){var e;this._mainWidget.update(t),null===(e=this._yAxisWidget)||void 0===e||e.update(t)},e.prototype.destroy=function(){var e;t.prototype.destroy.call(this),this._mainWidget.destroy(),null===(e=this._yAxisWidget)||void 0===e||e.destroy()},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),a=r.getContext("2d"),o=Vt(r);r.width=i*o,r.height=n*o,a.scale(o,o);var s=this._mainWidget.getBounding();if(a.drawImage(this._mainWidget.getImage(t),s.left,0,s.width,s.height),null!==this._yAxisWidget){var l=this._yAxisWidget.getBounding();a.drawImage(this._yAxisWidget.getImage(t),l.left,0,l.width,l.height)}return r},e.prototype.createYAxisWidget=function(t){return null},e}(er),nr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createAxisComponent=function(t){var e=tr(null!==t&&void 0!==t?t:"default");return new e(this)},e.prototype.createMainWidget=function(t){return new Ln(t,this)},e.prototype.createYAxisWidget=function(t){return new jn(t,this)},e}(ir),rr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.createMainWidget=function(t){return new $n(t,this)},e}(nr),ar=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.getAxisStyles=function(t){return t.xAxis},e.prototype.createAxisLine=function(t){return{coordinates:[{x:0,y:0},{x:t.width,y:0}]}},e.prototype.createTickLines=function(t,e,i){var n=i.tickLine,r=i.axisLine.size;return t.map(function(t){return{coordinates:[{x:t.coord,y:0},{x:t.coord,y:r+n.length}]}})},e.prototype.createTickTexts=function(t,e,i){var n=i.tickText,r=i.axisLine.size,a=i.tickLine.length;return t.map(function(t){return{x:t.coord,y:r+a+n.marginStart,text:t.text,align:"center",baseline:"top"}})},e}(Hn),or=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.coordinateToPointTimestampDataIndexFlag=function(){return!0},e.prototype.coordinateToPointValueFlag=function(){return!1},e.prototype.getCompleteOverlays=function(t){return t.getInstances()},e.prototype.getProgressOverlay=function(t){return t.instance},e.prototype.getDefaultFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h=[];if(t.needDefaultXAxisFigure&&t.id===(null===(d=u.instance)||void 0===d?void 0:d.id)){var p=Number.MAX_SAFE_INTEGER,f=Number.MIN_SAFE_INTEGER;e.forEach(function(e,i){p=Math.min(p,e.x),f=Math.max(f,e.x);var n=t.points[i];if(Tt(n.timestamp)){var o=a.formatDate(r,n.timestamp,"YYYY-MM-DD HH:mm",Zt.Crosshair);h.push({type:"text",attrs:{x:e.x,y:0,text:o,align:"center"},ignoreEvent:!0})}}),e.length>1&&h.unshift({type:"rect",attrs:{x:p,y:0,width:f-p,height:i.height},ignoreEvent:!0})}return h},e.prototype.getFigures=function(t,e,i,n,r,a,o,s,l,c,u){var d,h;return null!==(h=null===(d=t.createXAxisFigures)||void 0===d?void 0:d.call(t,{overlay:t,coordinates:e,bounding:i,barSpace:n,precision:r,thousandsSeparator:a,decimalFoldThreshold:o,dateTimeFormat:s,defaultStyles:l,xAxis:c,yAxis:u}))&&void 0!==h?h:[]},e}(Un),sr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.compare=function(t){return Mt(t.kLineData)&&t.dataIndex===t.realDataIndex},e.prototype.getDirectionStyles=function(t){return t.vertical},e.prototype.getText=function(t,e){var i,n=null===(i=t.kLineData)||void 0===i?void 0:i.timestamp;return e.getCustomApi().formatDate(e.getTimeScaleStore().getDateTimeFormat(),n,"YYYY-MM-DD HH:mm",Zt.Crosshair)},e.prototype.getTextAttrs=function(t,e,i,n,r,a){var o,s=i.realX,l="center";return s-e/2-a.paddingLeft<0?(o=0,l="left"):s+e/2+a.paddingRight>n.width?(o=n.width,l="right"):o=s,{x:o,y:0,text:t,align:l,baseline:"top"}},e}(Gn),lr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._xAxisView=new ar(n),n._overlayXAxisView=new or(n),n._crosshairVerticalLabelView=new sr(n),n.getContainer().style.cursor="ew-resize",n.addChild(n._overlayXAxisView),n}return B(e,t),e.prototype.getName=function(){return ji.X_AXIS},e.prototype.updateMain=function(t){this._xAxisView.draw(t)},e.prototype.updateOverlay=function(t){this._overlayXAxisView.draw(t),this._crosshairVerticalLabelView.draw(t)},e}(en),cr=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return B(e,t),e.prototype.calcRange=function(){var t=this.getParent().getChart().getChartStore(),e=t.getTimeScaleStore().getVisibleRange(),i=e.from,n=e.to,r=i,a=n-1,o=n-i;return{from:r,to:a,range:o,realFrom:r,realTo:a,realRange:o}},e.prototype.optimalTicks=function(t){var e,i,n=this.getParent().getChart(),r=n.getChartStore(),a=r.getCustomApi().formatDate,o=[],s=t.length,l=r.getDataList();if(s>0){var c=r.getTimeScaleStore().getDateTimeFormat(),u=n.getStyles().xAxis.tickText,d=Ht("00-00 00:00",u.size,u.weight,u.family),h=parseInt(t[0].value,10),p=this.convertToPixel(h),f=1;if(s>1){var v=parseInt(t[1].value,10),g=this.convertToPixel(v),m=Math.abs(g-p);me&&(t.apply(this,arguments),i=n)}}var vr=function(t){function e(e,i){var n=t.call(this,e,i)||this;return n._dragFlag=!1,n._dragStartY=0,n._topPaneHeight=0,n._bottomPaneHeight=0,n._pressedMouseMoveEvent=fr(n._pressedTouchMouseMoveEvent,20),n.registerEvent("touchStartEvent",n._mouseDownEvent.bind(n)).registerEvent("touchMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("touchEndEvent",n._mouseUpEvent.bind(n)).registerEvent("mouseDownEvent",n._mouseDownEvent.bind(n)).registerEvent("mouseUpEvent",n._mouseUpEvent.bind(n)).registerEvent("pressedMouseMoveEvent",n._pressedMouseMoveEvent.bind(n)).registerEvent("mouseEnterEvent",n._mouseEnterEvent.bind(n)).registerEvent("mouseLeaveEvent",n._mouseLeaveEvent.bind(n)),n}return B(e,t),e.prototype.getName=function(){return ji.SEPARATOR},e.prototype.checkEventOn=function(){return!0},e.prototype._mouseDownEvent=function(t){this._dragFlag=!0,this._dragStartY=t.pageY;var e=this.getPane();return this._topPaneHeight=e.getTopPane().getBounding().height,this._bottomPaneHeight=e.getBottomPane().getBounding().height,!0},e.prototype._mouseUpEvent=function(){return this._dragFlag=!1,this._mouseLeaveEvent()},e.prototype._pressedTouchMouseMoveEvent=function(t){var e=t.pageY-this._dragStartY,i=this.getPane(),n=i.getTopPane(),r=i.getBottomPane(),a=e<0;if(null!==n&&(null===r||void 0===r?void 0:r.getOptions().dragEnabled)){var o=void 0,s=void 0,l=void 0,c=void 0;a?(o=n,s=r,l=this._topPaneHeight,c=this._bottomPaneHeight):(o=r,s=n,l=this._bottomPaneHeight,c=this._topPaneHeight);var u=o.getOptions().minHeight;if(l>u){var d=Math.max(l-Math.abs(e),u),h=l-d;o.setBounding({height:d}),s.setBounding({height:c+h});var p=i.getChart();p.getChartStore().getActionStore().execute(Pt.OnPaneDrag,{paneId:i.getId()}),p.adjustPaneViewport(!0,!0,!0,!0,!0)}}return!0},e.prototype._mouseEnterEvent=function(){var t,e=this.getPane(),i=e.getBottomPane();if(null!==(t=null===i||void 0===i?void 0:i.getOptions().dragEnabled)&&void 0!==t&&t){var n=e.getChart(),r=n.getStyles().separator;return this.getContainer().style.background=r.activeBackgroundColor,!0}return!1},e.prototype._mouseLeaveEvent=function(){return!this._dragFlag&&(this.getContainer().style.background="",!0)},e.prototype.createContainer=function(){return he("div",{width:"100%",height:"".concat(qi,"px"),margin:"0",padding:"0",position:"absolute",top:"-3px",zIndex:"20",boxSizing:"border-box",cursor:"ns-resize"})},e.prototype.updateImp=function(t,e,i){if(4===i||2===i){var n=this.getPane().getChart().getStyles().separator;t.style.top="".concat(-Math.floor((qi-n.size)/2),"px"),t.style.height="".concat(qi,"px")}},e}(tn),gr=function(t){function e(e,i,n,r,a,o){var s=t.call(this,e,i,n,r)||this;return s.getContainer().style.overflow="",s._topPane=a,s._bottomPane=o,s._separatorWidget=new vr(s.getContainer(),s),s}return B(e,t),e.prototype.setBounding=function(t){return wt(this.getBounding(),t),this},e.prototype.getTopPane=function(){return this._topPane},e.prototype.setTopPane=function(t){return this._topPane=t,this},e.prototype.getBottomPane=function(){return this._bottomPane},e.prototype.setBottomPane=function(t){return this._bottomPane=t,this},e.prototype.getWidget=function(){return this._separatorWidget},e.prototype.getImage=function(t){var e=this.getBounding(),i=e.width,n=e.height,r=this.getChart().getStyles().separator,a=he("canvas",{width:"".concat(i,"px"),height:"".concat(n,"px"),boxSizing:"border-box"}),o=a.getContext("2d"),s=Vt(a);return a.width=i*s,a.height=n*s,o.scale(s,s),o.fillStyle=r.color,o.fillRect(0,0,i,n),a},e.prototype.updateImp=function(t,e,i){if(4===t||2===t){var n=this.getChart().getStyles().separator;e.style.backgroundColor=n.color,e.style.height="".concat(i.height,"px"),e.style.marginLeft="".concat(i.left,"px"),e.style.width="".concat(i.width,"px"),this._separatorWidget.update(t)}},e}(er);function mr(){var t;return"undefined"!==typeof window&&(null!==(t=window.navigator.userAgent.toLowerCase().indexOf("firefox"))&&void 0!==t?t:-1)>-1}function yr(){return"undefined"!==typeof window&&/iPhone|iPad|iPod/.test(window.navigator.platform)}var br,xr=10,_r=function(){function t(t,e,i){var n=this;this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY},this._longTapTimeoutId=null,this._longTapActive=!1,this._mouseMoveStartCoordinate=null,this._touchMoveStartCoordinate=null,this._touchMoveExceededManhattanDistance=!1,this._cancelClick=!1,this._cancelTap=!1,this._unsubscribeOutsideMouseEvents=null,this._unsubscribeOutsideTouchEvents=null,this._unsubscribeMobileSafariEvents=null,this._unsubscribeMousemove=null,this._unsubscribeMouseWheel=null,this._unsubscribeContextMenu=null,this._unsubscribeRootMouseEvents=null,this._unsubscribeRootTouchEvents=null,this._startPinchMiddleCoordinate=null,this._startPinchDistance=0,this._pinchPrevented=!1,this._preventTouchDragProcess=!1,this._mousePressed=!1,this._lastTouchEventTimeStamp=0,this._activeTouchId=null,this._acceptMouseLeave=!yr(),this._onFirefoxOutsideMouseUp=function(t){n._mouseUpHandler(t)},this._onMobileSafariDoubleClick=function(t){if(n._firesTouchEvents(t)){if(++n._tapCount,null!==n._tapTimeoutId&&n._tapCount>1){var e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._tapCoordinate).manhattanDistance;e<30&&!n._cancelTap&&n._processEvent(n._makeCompatEvent(t),n._handler.doubleTapEvent),n._resetTapTimeout()}}else if(++n._clickCount,null!==n._clickTimeoutId&&n._clickCount>1){e=n._mouseTouchMoveWithDownInfo(n._getCoordinate(t),n._clickCoordinate).manhattanDistance;e<5&&!n._cancelClick&&n._processEvent(n._makeCompatEvent(t),n._handler.mouseDoubleClickEvent),n._resetClickTimeout()}},this._target=t,this._handler=e,this._options=i,this._init()}return t.prototype.destroy=function(){null!==this._unsubscribeOutsideMouseEvents&&(this._unsubscribeOutsideMouseEvents(),this._unsubscribeOutsideMouseEvents=null),null!==this._unsubscribeOutsideTouchEvents&&(this._unsubscribeOutsideTouchEvents(),this._unsubscribeOutsideTouchEvents=null),null!==this._unsubscribeMousemove&&(this._unsubscribeMousemove(),this._unsubscribeMousemove=null),null!==this._unsubscribeMouseWheel&&(this._unsubscribeMouseWheel(),this._unsubscribeMouseWheel=null),null!==this._unsubscribeContextMenu&&(this._unsubscribeContextMenu(),this._unsubscribeContextMenu=null),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null),null!==this._unsubscribeMobileSafariEvents&&(this._unsubscribeMobileSafariEvents(),this._unsubscribeMobileSafariEvents=null),this._clearLongTapTimeout(),this._resetClickTimeout()},t.prototype._mouseEnterHandler=function(t){var e,i,n,r=this;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this);var a=this._mouseMoveHandler.bind(this);this._unsubscribeMousemove=function(){r._target.removeEventListener("mousemove",a)},this._target.addEventListener("mousemove",a);var o=this._mouseWheelHandler.bind(this);this._unsubscribeMouseWheel=function(){r._target.removeEventListener("wheel",o)},this._target.addEventListener("wheel",o,{passive:!1});var s=this._contextMenuHandler.bind(this);this._unsubscribeContextMenu=function(){r._target.removeEventListener("contextmenu",s)},this._target.addEventListener("contextmenu",s,{passive:!1}),this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseEnterEvent),this._acceptMouseLeave=!0)},t.prototype._resetClickTimeout=function(){null!==this._clickTimeoutId&&clearTimeout(this._clickTimeoutId),this._clickCount=0,this._clickTimeoutId=null,this._clickCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._resetTapTimeout=function(){null!==this._tapTimeoutId&&clearTimeout(this._tapTimeoutId),this._tapCount=0,this._tapTimeoutId=null,this._tapCoordinate={x:Number.NEGATIVE_INFINITY,y:Number.POSITIVE_INFINITY}},t.prototype._mouseMoveHandler=function(t){this._mousePressed||null!==this._touchMoveStartCoordinate||this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseMoveEvent),this._acceptMouseLeave=!0)},t.prototype._mouseWheelHandler=function(t){if(Math.abs(t.deltaX)>Math.abs(t.deltaY)){if(!Mt(this._handler.mouseWheelHortEvent))return;if(this._preventDefault(t),0===Math.abs(t.deltaX))return;this._handler.mouseWheelHortEvent(this._makeCompatEvent(t),-t.deltaX)}else{if(!Mt(this._handler.mouseWheelVertEvent))return;var e=-t.deltaY/100;if(0===e)return;switch(this._preventDefault(t),t.deltaMode){case t.DOM_DELTA_PAGE:e*=120;break;case t.DOM_DELTA_LINE:e*=32;break}if(0!==e){var i=Math.sign(e)*Math.min(1,Math.abs(e));this._handler.mouseWheelVertEvent(this._makeCompatEvent(t),i)}}},t.prototype._contextMenuHandler=function(t){this._preventDefault(t)},t.prototype._touchMoveHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null!==e&&(this._lastTouchEventTimeStamp=this._eventTimeStamp(t),null===this._startPinchMiddleCoordinate&&!this._preventTouchDragProcess)){this._pinchPrevented=!0;var i=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._touchMoveStartCoordinate),n=i.xOffset,r=i.yOffset,a=i.manhattanDistance;if(this._touchMoveExceededManhattanDistance||!(a<5)){if(!this._touchMoveExceededManhattanDistance){var o=.5*n,s=r>=o&&!this._options.treatVertDragAsPageScroll(),l=o>r&&!this._options.treatHorzDragAsPageScroll();s||l||(this._preventTouchDragProcess=!0),this._touchMoveExceededManhattanDistance=!0,this._cancelTap=!0,this._clearLongTapTimeout(),this._resetTapTimeout()}this._preventTouchDragProcess||this._processEvent(this._makeCompatEvent(t,e),this._handler.touchMoveEvent)}}},t.prototype._mouseMoveWithDownHandler=function(t){if(0===t.button){var e=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._mouseMoveStartCoordinate),i=e.manhattanDistance;i>=5&&(this._cancelClick=!0,this._resetClickTimeout()),this._cancelClick&&this._processEvent(this._makeCompatEvent(t),this._handler.pressedMouseMoveEvent)}},t.prototype._mouseTouchMoveWithDownInfo=function(t,e){var i=Math.abs(e.x-t.x),n=Math.abs(e.y-t.y),r=i+n;return{xOffset:i,yOffset:n,manhattanDistance:r}},t.prototype._touchEndHandler=function(t){var e=this._touchWithId(t.changedTouches,this._activeTouchId);if(null===e&&0===t.touches.length&&(e=t.changedTouches[0]),null!==e){this._activeTouchId=null,this._lastTouchEventTimeStamp=this._eventTimeStamp(t),this._clearLongTapTimeout(),this._touchMoveStartCoordinate=null,null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var i=this._makeCompatEvent(t,e);if(this._processEvent(i,this._handler.touchEndEvent),++this._tapCount,null!==this._tapTimeoutId&&this._tapCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(e),this._tapCoordinate).manhattanDistance;n<30&&!this._cancelTap&&this._processEvent(i,this._handler.doubleTapEvent),this._resetTapTimeout()}else this._cancelTap||(this._processEvent(i,this._handler.tapEvent),Mt(this._handler.tapEvent)&&this._preventDefault(t));0===this._tapCount&&this._preventDefault(t),0===t.touches.length&&this._longTapActive&&(this._longTapActive=!1,this._preventDefault(t))}},t.prototype._mouseUpHandler=function(t){if(0===t.button){var e=this._makeCompatEvent(t);if(this._mouseMoveStartCoordinate=null,this._mousePressed=!1,null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null),mr()){var i=this._target.ownerDocument.documentElement;i.removeEventListener("mouseleave",this._onFirefoxOutsideMouseUp)}if(!this._firesTouchEvents(t))if(this._processEvent(e,this._handler.mouseUpEvent),++this._clickCount,null!==this._clickTimeoutId&&this._clickCount>1){var n=this._mouseTouchMoveWithDownInfo(this._getCoordinate(t),this._clickCoordinate).manhattanDistance;n<5&&!this._cancelClick&&this._processEvent(e,this._handler.mouseDoubleClickEvent),this._resetClickTimeout()}else this._cancelClick||this._processEvent(e,this._handler.mouseClickEvent)}},t.prototype._clearLongTapTimeout=function(){null!==this._longTapTimeoutId&&(clearTimeout(this._longTapTimeoutId),this._longTapTimeoutId=null)},t.prototype._touchStartHandler=function(t){if(null===this._activeTouchId){var e=t.changedTouches[0];this._activeTouchId=e.identifier,this._lastTouchEventTimeStamp=this._eventTimeStamp(t);var i=this._target.ownerDocument.documentElement;this._cancelTap=!1,this._touchMoveExceededManhattanDistance=!1,this._preventTouchDragProcess=!1,this._touchMoveStartCoordinate=this._getCoordinate(e),null!==this._unsubscribeRootTouchEvents&&(this._unsubscribeRootTouchEvents(),this._unsubscribeRootTouchEvents=null);var n=this._touchMoveHandler.bind(this),r=this._touchEndHandler.bind(this);this._unsubscribeRootTouchEvents=function(){i.removeEventListener("touchmove",n),i.removeEventListener("touchend",r)},i.addEventListener("touchmove",n,{passive:!1}),i.addEventListener("touchend",r,{passive:!1}),this._clearLongTapTimeout(),this._longTapTimeoutId=setTimeout(this._longTapHandler.bind(this,t),500),this._processEvent(this._makeCompatEvent(t,e),this._handler.touchStartEvent),null===this._tapTimeoutId&&(this._tapCount=0,this._tapTimeoutId=setTimeout(this._resetTapTimeout.bind(this),500),this._tapCoordinate=this._getCoordinate(e))}},t.prototype._mouseDownHandler=function(t){if(2===t.button)return this._preventDefault(t),void this._processEvent(this._makeCompatEvent(t),this._handler.mouseRightClickEvent);if(0===t.button){var e=this._target.ownerDocument.documentElement;mr()&&e.addEventListener("mouseleave",this._onFirefoxOutsideMouseUp),this._cancelClick=!1,this._mouseMoveStartCoordinate=this._getCoordinate(t),null!==this._unsubscribeRootMouseEvents&&(this._unsubscribeRootMouseEvents(),this._unsubscribeRootMouseEvents=null);var i=this._mouseMoveWithDownHandler.bind(this),n=this._mouseUpHandler.bind(this);this._unsubscribeRootMouseEvents=function(){e.removeEventListener("mousemove",i),e.removeEventListener("mouseup",n)},e.addEventListener("mousemove",i),e.addEventListener("mouseup",n),this._mousePressed=!0,this._firesTouchEvents(t)||(this._processEvent(this._makeCompatEvent(t),this._handler.mouseDownEvent),null===this._clickTimeoutId&&(this._clickCount=0,this._clickTimeoutId=setTimeout(this._resetClickTimeout.bind(this),500),this._clickCoordinate=this._getCoordinate(t)))}},t.prototype._init=function(){var t=this;this._target.addEventListener("mouseenter",this._mouseEnterHandler.bind(this)),this._target.addEventListener("touchcancel",this._clearLongTapTimeout.bind(this));var e=this._target.ownerDocument,i=function(e){null!=t._handler.mouseDownOutsideEvent&&(e.composed&&t._target.contains(e.composedPath()[0])||null!==e.target&&t._target.contains(e.target)||t._handler.mouseDownOutsideEvent({x:0,y:0,pageX:0,pageY:0}))};this._unsubscribeOutsideTouchEvents=function(){e.removeEventListener("touchstart",i)},this._unsubscribeOutsideMouseEvents=function(){e.removeEventListener("mousedown",i)},e.addEventListener("mousedown",i),e.addEventListener("touchstart",i,{passive:!0}),yr()&&(this._unsubscribeMobileSafariEvents=function(){t._target.removeEventListener("dblclick",t._onMobileSafariDoubleClick)},this._target.addEventListener("dblclick",this._onMobileSafariDoubleClick)),this._target.addEventListener("mouseleave",this._mouseLeaveHandler.bind(this)),this._target.addEventListener("touchstart",this._touchStartHandler.bind(this),{passive:!0}),this._target.addEventListener("mousedown",function(t){if(1===t.button)return t.preventDefault(),!1}),this._target.addEventListener("mousedown",this._mouseDownHandler.bind(this)),this._initPinch(),this._target.addEventListener("touchmove",function(){},{passive:!1})},t.prototype._initPinch=function(){var t=this;(Mt(this._handler.pinchStartEvent)||Mt(this._handler.pinchEvent)||Mt(this._handler.pinchEndEvent))&&(this._target.addEventListener("touchstart",function(e){t._checkPinchState(e.touches)},{passive:!0}),this._target.addEventListener("touchmove",function(e){if(2===e.touches.length&&null!==t._startPinchMiddleCoordinate&&Mt(t._handler.pinchEvent)){var i=t._getTouchDistance(e.touches[0],e.touches[1]),n=i/t._startPinchDistance;t._handler.pinchEvent(X(X({},t._startPinchMiddleCoordinate),{pageX:0,pageY:0}),n),t._preventDefault(e)}},{passive:!1}),this._target.addEventListener("touchend",function(e){t._checkPinchState(e.touches)}))},t.prototype._checkPinchState=function(t){1===t.length&&(this._pinchPrevented=!1),2!==t.length||this._pinchPrevented||this._longTapActive?this._stopPinch():this._startPinch(t)},t.prototype._startPinch=function(t){var e,i=null!==(e=this._target.getBoundingClientRect())&&void 0!==e?e:{left:0,top:0};this._startPinchMiddleCoordinate={x:(t[0].clientX-i.left+(t[1].clientX-i.left))/2,y:(t[0].clientY-i.top+(t[1].clientY-i.top))/2},this._startPinchDistance=this._getTouchDistance(t[0],t[1]),Mt(this._handler.pinchStartEvent)&&this._handler.pinchStartEvent({x:0,y:0,pageX:0,pageY:0}),this._clearLongTapTimeout()},t.prototype._stopPinch=function(){null!==this._startPinchMiddleCoordinate&&(this._startPinchMiddleCoordinate=null,Mt(this._handler.pinchEndEvent)&&this._handler.pinchEndEvent({x:0,y:0,pageX:0,pageY:0}))},t.prototype._mouseLeaveHandler=function(t){var e,i,n;null===(e=this._unsubscribeMousemove)||void 0===e||e.call(this),null===(i=this._unsubscribeMouseWheel)||void 0===i||i.call(this),null===(n=this._unsubscribeContextMenu)||void 0===n||n.call(this),this._firesTouchEvents(t)||this._acceptMouseLeave&&(this._processEvent(this._makeCompatEvent(t),this._handler.mouseLeaveEvent),this._acceptMouseLeave=!yr())},t.prototype._longTapHandler=function(t){var e=this._touchWithId(t.touches,this._activeTouchId);null!==e&&(this._processEvent(this._makeCompatEvent(t,e),this._handler.longTapEvent),this._cancelTap=!0,this._longTapActive=!0)},t.prototype._firesTouchEvents=function(t){var e;return Mt(null===(e=t.sourceCapabilities)||void 0===e?void 0:e.firesTouchEvents)?t.sourceCapabilities.firesTouchEvents:this._eventTimeStamp(t)this._startScrollCoordinate.y-s.y){var d=s.x-this._startScrollCoordinate.x;c.getTimeScaleStore().scroll(d)}return!0;case ji.X_AXIS:case ji.Y_AXIS:var h=o.dispatchEvent("pressedMouseMoveEvent",s);return h&&(null===(n=s.preventDefault)||void 0===n||n.call(s),this._chart.updatePane(1)),h}}return!1},t.prototype.touchEndEvent=function(t){var e=this,i=this._findWidgetByEvent(t).widget;if(null!==i){var n=this._makeWidgetEvent(t,i),r=i.getName();switch(r){case ji.MAIN:if(i.dispatchEvent("mouseUpEvent",n),null!==this._startScrollCoordinate){var a=(new Date).getTime()-this._flingStartTime,o=n.x-this._startScrollCoordinate.x,s=o/(a>0?a:1)*20;if(a<200&&Math.abs(s)>0){var l=this._chart.getChartStore().getTimeScaleStore(),c=function(){e._flingScrollRequestId=oe(function(){l.startScroll(),l.scroll(s),s*=.975,Math.abs(s)<1?null!==e._flingScrollRequestId&&(se(e._flingScrollRequestId),e._flingScrollRequestId=null):c()})};c()}}return!0;case ji.X_AXIS:case ji.Y_AXIS:var u=i.dispatchEvent("mouseUpEvent",n);u&&this._chart.updatePane(1)}}return!1},t.prototype.tapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget,r=!1;if(null!==n){var a=this._makeWidgetEvent(t,n),o=n.dispatchEvent("mouseClickEvent",a);if(n.getName()===ji.MAIN){var s=this._makeWidgetEvent(t,n),l=this._chart.getChartStore(),c=l.getTooltipStore();o?(this._touchCancelCrosshair=!0,this._touchCoordinate=null,c.setCrosshair(void 0,{notInvalidate:!0}),r=!0):(this._touchCancelCrosshair||this._touchZoomed||(this._touchCoordinate={x:s.x,y:s.y},c.setCrosshair({x:s.x,y:s.y,paneId:null===i||void 0===i?void 0:i.getId()},{notInvalidate:!0}),r=!0),this._touchCancelCrosshair=!1)}(r||o)&&this._chart.updatePane(1)}return r},t.prototype.doubleTapEvent=function(t){return this.mouseDoubleClickEvent(t)},t.prototype.longTapEvent=function(t){var e=this._findWidgetByEvent(t),i=e.pane,n=e.widget;if(null!==n&&n.getName()===ji.MAIN){var r=this._makeWidgetEvent(t,n);return this._touchCoordinate={x:r.x,y:r.y},this._chart.getChartStore().getTooltipStore().setCrosshair({x:r.x,y:r.y,paneId:null===i||void 0===i?void 0:i.getId()}),!0}return!1},t.prototype._findWidgetByEvent=function(t){var e,i,n,r,a=t.x,o=t.y,s=this._chart.getAllSeparatorPanes(),l=this._chart.getChartStore().getStyles().separator.size;try{for(var c=j(s),u=c.next();!u.done;u=c.next()){var d=q(u.value,2),h=d[1],p=h.getBounding(),f=p.top-Math.round((qi-l)/2);if(a>=p.left&&a<=p.left+p.width&&o>=f&&o<=f+qi)return{pane:h,widget:h.getWidget()}}}catch(k){e={error:k}}finally{try{u&&!u.done&&(i=c.return)&&i.call(c)}finally{if(e)throw e.error}}var v=this._chart.getAllDrawPanes(),g=null;try{for(var m=j(v),y=m.next();!y.done;y=m.next()){var b=y.value;p=b.getBounding();if(a>=p.left&&a<=p.left+p.width&&o>=p.top&&o<=p.top+p.height){g=b;break}}}catch(A){n={error:A}}finally{try{y&&!y.done&&(r=m.return)&&r.call(m)}finally{if(n)throw n.error}}var x=null;if(null!==g){if(null===x){var _=g.getMainWidget(),w=_.getBounding();a>=w.left&&a<=w.left+w.width&&o>=w.top&&o<=w.top+w.height&&(x=_)}if(null===x){var C=g.getYAxisWidget();if(null!==C){var S=C.getBounding();a>=S.left&&a<=S.left+S.width&&o>=S.top&&o<=S.top+S.height&&(x=C)}}}return{pane:g,widget:x}},t.prototype._makeWidgetEvent=function(t,e){var i,n,r,a=null!==(i=null===e||void 0===e?void 0:e.getBounding())&&void 0!==i?i:null;return X(X({},t),{x:t.x-(null!==(n=null===a||void 0===a?void 0:a.left)&&void 0!==n?n:0),y:t.y-(null!==(r=null===a||void 0===a?void 0:a.top)&&void 0!==r?r:0)})},t.prototype.destroy=function(){this._container.removeEventListener("keydown",this._boundKeyBoardDownEvent),this._event.destroy()},t}();(function(t){t["Root"]="root",t["Main"]="main",t["YAxis"]="yAxis"})(br||(br={}));var Cr=function(){function t(t,e){this._drawPanes=[],this._separatorPanes=new Map,this._initContainer(t),this._chartEvent=new wr(this._chartContainer,this),this._chartStore=new Gi(this,e),this._initPanes(e),this.adjustPaneViewport(!0,!0,!0)}return t.prototype._initContainer=function(t){this._container=t,this._chartContainer=he("div",{position:"relative",width:"100%",outline:"none",borderStyle:"none",cursor:"crosshair",boxSizing:"border-box",userSelect:"none",webkitUserSelect:"none",msUserSelect:"none",MozUserSelect:"none",webkitTapHighlightColor:"transparent"}),this._chartContainer.tabIndex=1,t.appendChild(this._chartContainer)},t.prototype._initPanes=function(t){var e,i=this,n=null!==(e=null===t||void 0===t?void 0:t.layout)&&void 0!==e?e:[{type:"candle"}],r=!1,a=!1,o=function(t){if(!a){var e=i._createPane(pr,Vi.X_AXIS,null!==t&&void 0!==t?t:{});i._xAxisPane=e,a=!0}};n.forEach(function(t){var e,n,a;switch(t.type){case"candle":if(!r){var s=null!==(e=t.options)&&void 0!==e?e:{};wt(s,{id:Vi.CANDLE}),i._candlePane=i._createPane(rr,Vi.CANDLE,s);var l=null!==(n=t.content)&&void 0!==n?n:[];l.forEach(function(t){i.createIndicator(t,!0,s)}),r=!0}break;case"indicator":var c;l=null!==(a=t.content)&&void 0!==a?a:[];if(l.length>0)l.forEach(function(e){Mt(c)?i.createIndicator(e,!0,{id:c}):c=i.createIndicator(e,!0,t.options)});break;case"xAxis":o(t.options);break}}),o({position:"bottom"})},t.prototype._createPane=function(t,e,i){var n,r=null,a=null,o=null===i||void 0===i?void 0:i.position;switch(o){case"top":var s=this._drawPanes[0];Mt(s)&&(a=new t(this._chartContainer,s.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=0);break;case"bottom":break;default:for(var l=this._drawPanes.length-1;l>-1;l--){var c=this._drawPanes[l],u=this._drawPanes[l-1];if("bottom"===(null===c||void 0===c?void 0:c.getOptions().position)&&"bottom"!==(null===u||void 0===u?void 0:u.getOptions().position)){a=new t(this._chartContainer,c.getContainer(),this,e,null!==i&&void 0!==i?i:{}),r=l;break}}}if(Mt(a)||(a=new t(this._chartContainer,null,this,e,null!==i&&void 0!==i?i:{})),Tt(r)?(this._drawPanes.splice(r,0,a),n=r):(this._drawPanes.push(a),n=this._drawPanes.length-1),a.getId()!==Vi.X_AXIS){var d=this._drawPanes[n+1];if(Mt(d)&&d.getId()===Vi.X_AXIS&&(d=this._drawPanes[n+2]),Mt(d)){var h=this._separatorPanes.get(d);Mt(h)?h.setTopPane(a):(h=new gr(this._chartContainer,d.getContainer(),this,"",a,d),this._separatorPanes.set(d,h))}var p=this._drawPanes[n-1];if(Mt(p)&&p.getId()===Vi.X_AXIS&&(p=this._drawPanes[n-2]),Mt(p)){h=new gr(this._chartContainer,a.getContainer(),this,"",p,a);this._separatorPanes.set(a,h)}}return a},t.prototype._measurePaneHeight=function(){var t,e=this,i=Math.floor(this._container.clientHeight),n=this._chartStore.getStyles().separator.size,r=this._xAxisPane.getAxisComponent().getAutoSize(),a=i-r-this._separatorPanes.size*n;a<0&&(a=0);var o=0;this._drawPanes.forEach(function(t){if(t.getId()!==Vi.CANDLE&&t.getId()!==Vi.X_AXIS){var e=t.getBounding().height,i=t.getOptions().minHeight;ea?(o=a,e=Math.max(a-o,0)):o+=e,t.setBounding({height:e})}});var s=a-o;null===(t=this._candlePane)||void 0===t||t.setBounding({height:s}),this._xAxisPane.setBounding({height:r});var l=0;this._drawPanes.forEach(function(t){var i=e._separatorPanes.get(t);Mt(i)&&(i.setBounding({height:n,top:l}),l+=n),t.setBounding({top:l}),l+=t.getBounding().height})},t.prototype._measurePaneWidth=function(){var t=this,e=Math.floor(this._container.clientWidth),i=this._chartStore.getStyles(),n=i.yAxis,r=n.position===K.Left,a=!n.inside,o=0,s=0,l=0,c=0;this._drawPanes.forEach(function(t){t.getId()!==Vi.X_AXIS&&(s=Math.max(s,t.getAxisComponent().getAutoSize()))}),s>e&&(s=e),a?(o=e-s,r?(l=0,c=s):(l=e-s,c=0)):(o=e,c=0,l=r?0:e-s),this._chartStore.getTimeScaleStore().setTotalBarSpace(o);var u,d={width:e},h={width:o,left:c},p={width:s,left:l},f=i.separator.fill;u=a&&!f?h:d,this._drawPanes.forEach(function(e){var i;null===(i=t._separatorPanes.get(e))||void 0===i||i.setBounding(u),e.setBounding(d,h,p)})},t.prototype._setPaneOptions=function(t,e){var i,n;if(Et(t.id)){var r=this.getDrawPaneById(t.id),a=!1;if(null!==r){var o=e;if(t.id!==Vi.CANDLE&&Tt(t.height)&&t.height>0){var s=Math.max(null!==(i=t.minHeight)&&void 0!==i?i:r.getOptions().minHeight,0),l=Math.max(s,t.height);r.setBounding({height:l}),o=!0,a=!0}(Et(null===(n=t.axisOptions)||void 0===n?void 0:n.name)||Mt(t.gap))&&(o=!0),r.setOptions(t),o&&this.adjustPaneViewport(a,!0,!0,!0,!0)}}},t.prototype.getDrawPaneById=function(t){if(t===Vi.CANDLE)return this._candlePane;if(t===Vi.X_AXIS)return this._xAxisPane;var e=this._drawPanes.find(function(e){return e.getId()===t});return null!==e&&void 0!==e?e:null},t.prototype.getContainer=function(){return this._container},t.prototype.getChartStore=function(){return this._chartStore},t.prototype.getXAxisPane=function(){return this._xAxisPane},t.prototype.getAllDrawPanes=function(){return this._drawPanes},t.prototype.getAllSeparatorPanes=function(){return this._separatorPanes},t.prototype.adjustPaneViewport=function(t,e,i,n,r){t&&this._measurePaneHeight();var a=e,o=null!==n&&void 0!==n&&n,s=null!==r&&void 0!==r&&r;(o||s)&&this._drawPanes.forEach(function(t){var e=t.getAxisComponent().buildTicks(s);a||(a=e)}),a&&this._measurePaneWidth(),null!==i&&void 0!==i&&i&&(this._xAxisPane.getAxisComponent().buildTicks(!0),this.updatePane(4))},t.prototype.updatePane=function(t,e){if(Mt(e)){var i=this.getDrawPaneById(e);null===i||void 0===i||i.update(t)}else this._separatorPanes.forEach(function(e){e.update(t)}),this._drawPanes.forEach(function(e){e.update(t)})},t.prototype.crosshairChange=function(t){var e=this,i=this._chartStore.getActionStore();if(i.has(Pt.OnCrosshairChange)){var n={};this._drawPanes.forEach(function(i){var r=i.getId(),a={},o=e._chartStore.getIndicatorStore().getInstances(r);o.forEach(function(e){var i,n=e.result;a[e.name]=n[null!==(i=t.dataIndex)&&void 0!==i?i:n.length-1]}),n[r]=a}),Et(t.paneId)&&i.execute(Pt.OnCrosshairChange,X(X({},t),{indicatorData:n}))}},t.prototype.getDom=function(t,e){var i,n;if(!Et(t))return this._chartContainer;var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getContainer();case br.Main:return r.getMainWidget().getContainer();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getContainer())&&void 0!==n?n:null}}return null},t.prototype.getSize=function(t,e){var i,n;if(!Mt(t))return{width:Math.floor(this._chartContainer.clientWidth),height:Math.floor(this._chartContainer.clientHeight),left:0,top:0,right:0,bottom:0};var r=this.getDrawPaneById(t);if(null!==r){var a=null!==e&&void 0!==e?e:br.Root;switch(a){case br.Root:return r.getBounding();case br.Main:return r.getMainWidget().getBounding();case br.YAxis:return null!==(n=null===(i=r.getYAxisWidget())||void 0===i?void 0:i.getBounding())&&void 0!==n?n:null}}return null},t.prototype.setStyles=function(t){var e,i,n;this._chartStore.setOptions({styles:t}),n=Et(t)?Ui(t):t,Mt(null===(e=null===n||void 0===n?void 0:n.yAxis)||void 0===e?void 0:e.type)&&(null===(i=this._candlePane)||void 0===i||i.getAxisComponent().setAutoCalcTickFlag(!0)),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getStyles=function(){return this._chartStore.getStyles()},t.prototype.setLocale=function(t){this._chartStore.setOptions({locale:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.getLocale=function(){return this._chartStore.getLocale()},t.prototype.setCustomApi=function(t){this._chartStore.setOptions({customApi:t}),this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.setPriceVolumePrecision=function(t,e){this._chartStore.setPrecision({price:t,volume:e})},t.prototype.getPriceVolumePrecision=function(){return this._chartStore.getPrecision()},t.prototype.setTimezone=function(t){this._chartStore.setOptions({timezone:t}),this._xAxisPane.getAxisComponent().buildTicks(!0),this._xAxisPane.update(3)},t.prototype.getTimezone=function(){return this._chartStore.getTimeScaleStore().getTimezone()},t.prototype.setOffsetRightDistance=function(t){this._chartStore.getTimeScaleStore().setOffsetRightDistance(t,!0)},t.prototype.getOffsetRightDistance=function(){return this._chartStore.getTimeScaleStore().getOffsetRightDistance()},t.prototype.setMaxOffsetLeftDistance=function(t){t<0?bt("setMaxOffsetLeftDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetLeftDistance(t)},t.prototype.setMaxOffsetRightDistance=function(t){t<0?bt("setMaxOffsetRightDistance","distance","distance must greater than zero!!!"):this._chartStore.getTimeScaleStore().setMaxOffsetRightDistance(t)},t.prototype.setLeftMinVisibleBarCount=function(t){t<0?bt("setLeftMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setLeftMinVisibleBarCount(Math.ceil(t))},t.prototype.setRightMinVisibleBarCount=function(t){t<0?bt("setRightMinVisibleBarCount","barCount","barCount must greater than zero!!!"):this._chartStore.getTimeScaleStore().setRightMinVisibleBarCount(Math.ceil(t))},t.prototype.setBarSpace=function(t){this._chartStore.getTimeScaleStore().setBarSpace(t)},t.prototype.getBarSpace=function(){return this._chartStore.getTimeScaleStore().getBarSpace().bar},t.prototype.getVisibleRange=function(){return this._chartStore.getTimeScaleStore().getVisibleRange()},t.prototype.clearData=function(){this._chartStore.clear()},t.prototype.getDataList=function(){return this._chartStore.getDataList()},t.prototype.applyNewData=function(t,e,i){Mt(i)&&bt("applyNewData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t,Kt.Init,e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.applyMoreData=function(t,e,i){bt("","","Api `applyMoreData` has been deprecated since version 9.8.0."),this._chartStore.addData(t,Kt.Forward,null===e||void 0===e||e).then(function(){}).catch(function(){}).finally(function(){null===i||void 0===i||i()})},t.prototype.updateData=function(t,e){Mt(e)&&bt("updateData","","param `callback` has been deprecated since version 9.8.0, use `subscribeAction('onDataReady')` instead."),this._chartStore.addData(t).then(function(){}).catch(function(){}).finally(function(){null===e||void 0===e||e()})},t.prototype.loadMore=function(t){bt("","","Api `loadMore` has been deprecated since version 9.8.0, use `setLoadDataCallback` instead."),this._chartStore.setLoadMoreCallback(t)},t.prototype.setLoadDataCallback=function(t){this._chartStore.setLoadDataCallback(t)},t.prototype.createIndicator=function(t,e,i,n){var r,a=this,o=Et(t)?{name:t}:t;if(null===ai(o.name))return bt("createIndicator","value","indicator not supported, you may need to use registerIndicator to add one!!!"),null;var s=null===i||void 0===i?void 0:i.id,l=this.getDrawPaneById(null!==s&&void 0!==s?s:"");if(null!==l)this._chartStore.getIndicatorStore().addInstance(o,null!==s&&void 0!==s?s:"",null!==e&&void 0!==e&&e).then(function(t){var e;a._setPaneOptions(null!==i&&void 0!==i?i:{},null!==(e=l.getAxisComponent().buildTicks(!0))&&void 0!==e&&e)}).catch(function(t){});else{null!==s&&void 0!==s||(s=de(Vi.INDICATOR));var c=this._createPane(nr,s,null!==i&&void 0!==i?i:{}),u=null!==(r=null===i||void 0===i?void 0:i.height)&&void 0!==r?r:Wi;c.setBounding({height:u}),this._chartStore.getIndicatorStore().addInstance(o,s,null!==e&&void 0!==e&&e).finally(function(){a.adjustPaneViewport(!0,!0,!0,!0,!0),null===n||void 0===n||n()})}return null!==s&&void 0!==s?s:null},t.prototype.overrideIndicator=function(t,e,i){var n=this;this._chartStore.getIndicatorStore().override(t,null!==e&&void 0!==e?e:null).then(function(t){var e=q(t,2),r=e[0],a=e[1];(r||a)&&(n.adjustPaneViewport(!1,a,!0,a),null===i||void 0===i||i())}).catch(function(){})},t.prototype.getIndicatorByPaneId=function(t,e){return this._chartStore.getIndicatorStore().getInstanceByPaneId(t,e)},t.prototype.removeIndicator=function(t,e){var i,n,r,a=this._chartStore.getIndicatorStore(),o=a.removeInstance(t,e);if(o){var s=!1;if(t!==Vi.CANDLE&&!a.hasInstances(t)){var l=this.getDrawPaneById(t),c=this._drawPanes.findIndex(function(e){return e.getId()===t});if(null!==l){s=!0;var u=this._separatorPanes.get(l);if(Mt(u)){var d=null===u||void 0===u?void 0:u.getTopPane();try{for(var h=j(this._separatorPanes),p=h.next();!p.done;p=h.next()){var f=p.value;if(f[1].getTopPane().getId()===l.getId()){f[1].setTopPane(d);break}}}catch(g){i={error:g}}finally{try{p&&!p.done&&(n=h.return)&&n.call(h)}finally{if(i)throw i.error}}u.destroy(),this._separatorPanes.delete(l)}this._drawPanes.splice(c,1),l.destroy();var v=this._drawPanes[0];Mt(v)&&v.getId()===Vi.X_AXIS&&(v=this._drawPanes[1]),null===(r=this._separatorPanes.get(v))||void 0===r||r.destroy(),this._separatorPanes.delete(v)}}this.adjustPaneViewport(s,!0,!0,!0,!0)}},t.prototype.createOverlay=function(t,e){var i=[];if(Et(t))i=[{name:t}];else if(St(t))i=t.map(function(t){return Et(t)?{name:t}:t});else{var n=t;i=[n]}var r=!0;Mt(e)&&null!==this.getDrawPaneById(e)||(e=Vi.CANDLE,r=!1);var a=this._chartStore.getOverlayStore().addInstances(i,e,r);return St(t)?a:a[0]},t.prototype.getOverlayById=function(t){return this._chartStore.getOverlayStore().getInstanceById(t)},t.prototype.overrideOverlay=function(t){this._chartStore.getOverlayStore().override(t)},t.prototype.removeOverlay=function(t){var e;Mt(t)&&(e=Et(t)?{id:t}:t),this._chartStore.getOverlayStore().removeInstance(e)},t.prototype.setPaneOptions=function(t){this._setPaneOptions(t,!1)},t.prototype.setZoomEnabled=function(t){this._chartStore.getTimeScaleStore().setZoomEnabled(t)},t.prototype.isZoomEnabled=function(){return this._chartStore.getTimeScaleStore().getZoomEnabled()},t.prototype.setScrollEnabled=function(t){this._chartStore.getTimeScaleStore().setScrollEnabled(t)},t.prototype.isScrollEnabled=function(){return this._chartStore.getTimeScaleStore().getScrollEnabled()},t.prototype.scrollByDistance=function(t,e){var i=Tt(e)&&e>0?e:0,n=this._chartStore.getTimeScaleStore();if(n.startScroll(),i>0){var r=new le({duration:i});r.doFrame(function(e){var r=t*(e/i);n.scroll(r)}),r.start()}else n.scroll(t)},t.prototype.scrollToRealTime=function(t){var e=this._chartStore.getTimeScaleStore(),i=e.getBarSpace().bar,n=e.getLastBarRightSideDiffBarCount()-e.getInitialOffsetRightDistance()/i,r=n*i;this.scrollByDistance(r,t)},t.prototype.scrollToDataIndex=function(t,e){var i=this._chartStore.getTimeScaleStore(),n=(i.getLastBarRightSideDiffBarCount()+(this.getDataList().length-1-t))*i.getBarSpace().bar;this.scrollByDistance(n,e)},t.prototype.scrollToTimestamp=function(t,e){var i=pe(this.getDataList(),"timestamp",t);this.scrollToDataIndex(i,e)},t.prototype.zoomAtCoordinate=function(t,e,i){var n=Tt(i)&&i>0?i:0,r=this._chartStore.getTimeScaleStore(),a=r.getBarSpace().bar,o=a*t,s=o-a;if(n>0){var l=0,c=new le({duration:n});c.doFrame(function(t){var i=s*(t/n),a=(i-l)/r.getBarSpace().bar*ke;r.zoom(a,e),l=i}),c.start()}else r.zoom(s/a*ke,e)},t.prototype.zoomAtDataIndex=function(t,e,i){var n=this._chartStore.getTimeScaleStore().dataIndexToCoordinate(e);this.zoomAtCoordinate(t,{x:n,y:0},i)},t.prototype.zoomAtTimestamp=function(t,e,i){var n=pe(this.getDataList(),"timestamp",e);this.zoomAtDataIndex(t,n,i)},t.prototype.convertToPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e={},i=t.dataIndex;if(Tt(t.timestamp)&&(i=c.timestampToDataIndex(t.timestamp)),Tt(i)&&(e.x=null===h||void 0===h?void 0:h.convertToPixel(i)),Tt(t.value)){var n=null===p||void 0===p?void 0:p.convertToPixel(t.value);e.y=o?u.top+n:n}return e})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.convertFromPixel=function(t,e){var i,n=e.paneId,r=void 0===n?Vi.CANDLE:n,a=e.absolute,o=void 0!==a&&a,s=[];if(r!==Vi.X_AXIS){var l=this.getDrawPaneById(r);if(null!==l){var c=this._chartStore.getTimeScaleStore(),u=l.getBounding(),d=(new Array).concat(t),h=this._xAxisPane.getAxisComponent(),p=l.getAxisComponent();s=d.map(function(t){var e,i,n={};if(Tt(t.x)){var r=null!==(e=null===h||void 0===h?void 0:h.convertFromPixel(t.x))&&void 0!==e?e:-1;n.dataIndex=r,n.timestamp=null!==(i=c.dataIndexToTimestamp(r))&&void 0!==i?i:void 0}if(Tt(t.y)){var a=o?t.y-u.top:t.y;n.value=p.convertFromPixel(a)}return n})}}return St(t)?s:null!==(i=s[0])&&void 0!==i?i:{}},t.prototype.executeAction=function(t,e){var i;switch(t){case Pt.OnCrosshairChange:var n=X({},e);n.paneId=null!==(i=n.paneId)&&void 0!==i?i:Vi.CANDLE,this._chartStore.getTooltipStore().setCrosshair(n,{notExecuteAction:!0});break}},t.prototype.subscribeAction=function(t,e){this._chartStore.getActionStore().subscribe(t,e)},t.prototype.unsubscribeAction=function(t,e){this._chartStore.getActionStore().unsubscribe(t,e)},t.prototype.getConvertPictureUrl=function(t,e,i){var n=this,r=this._chartContainer.clientWidth,a=this._chartContainer.clientHeight,o=he("canvas",{width:"".concat(r,"px"),height:"".concat(a,"px"),boxSizing:"border-box"}),s=o.getContext("2d"),l=Vt(o);o.width=r*l,o.height=a*l,s.scale(l,l),s.fillStyle=null!==i&&void 0!==i?i:"#FFFFFF",s.fillRect(0,0,r,a);var c=null!==t&&void 0!==t&&t;return this._drawPanes.forEach(function(t){var e=n._separatorPanes.get(t);if(Mt(e)){var i=e.getBounding();s.drawImage(e.getImage(c),i.left,i.top,i.width,i.height)}var a=t.getBounding();s.drawImage(t.getImage(c),0,a.top,r,a.height)}),o.toDataURL("image/".concat(null!==e&&void 0!==e?e:"jpeg"))},t.prototype.resize=function(){this.adjustPaneViewport(!0,!0,!0,!0,!0)},t.prototype.destroy=function(){this._chartEvent.destroy(),this._drawPanes.forEach(function(t){t.destroy()}),this._drawPanes=[],this._separatorPanes.forEach(function(t){t.destroy()}),this._separatorPanes.clear(),this._container.removeChild(this._chartContainer)},t}(),Sr=new Map,kr=1;function Ar(t,e){var i;if(_t(),i=Et(t)?document.getElementById(t):t,null===i)return xt("","","The chart cannot be initialized correctly. Please check the parameters. The chart container cannot be null and child elements need to be added!!!"),null;var n=Sr.get(i.id);if(Mt(n))return bt("","","The chart has been initialized on the dom!!!"),n;var r="k_line_chart_".concat(kr++);return n=new Cr(i,e),n.id=r,i.setAttribute("k-line-chart-id",r),Sr.set(r,n),n}var Tr=i(21396),Mr=i.n(Tr);function Ir(t,e,i,n){if(!t||!e||!i||!n)return t;try{var r=Mr().enc.Base64.parse(t),a=Mr().lib.WordArray.create(r.words.slice(0,4)),o=Mr().lib.WordArray.create(r.words.slice(4)),s=Mr().enc.Base64.parse(n),l=Mr().AES.decrypt({ciphertext:o},s,{iv:a,mode:Mr().mode.CBC,padding:Mr().pad.Pkcs7}),c=l.toString(Mr().enc.Utf8);return c||t}catch(u){return t}}function Er(t,e){return Dr.apply(this,arguments)}function Dr(){return Dr=(0,c.A)((0,l.A)().m(function t(e,i){var n,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&i){t.n=1;break}throw new Error("用户ID和指标ID不能为空");case 1:return t.p=1,t.n=2,(0,f.Ay)({url:"/api/indicator/getDecryptKey",method:"post",data:{userid:e,indicatorId:i}});case 2:if(n=t.v,1!==n.code||!n.data||!n.data.key){t.n=3;break}return t.a(2,n.data.key);case 3:throw new Error(n.msg||"获取解密密钥失败");case 4:t.n=6;break;case 5:throw t.p=5,r=t.v,new Error("无法获取解密密钥,请检查网络连接或联系管理员: "+(r.message||"未知错误"));case 6:return t.a(2)}},t,null,[[1,5]])})),Dr.apply(this,arguments)}function Pr(t,e,i){return Lr.apply(this,arguments)}function Lr(){return Lr=(0,c.A)((0,l.A)().m(function t(e,i,n){var r;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,Er(i,n);case 1:return r=t.v,t.a(2,Ir(e,i,n,r))}},t)})),Lr.apply(this,arguments)}function Rr(t,e){if(1===e||!0===e)return!0;if(t&&t.length>100)try{var i=atob(t);if(i.length>50)return!0}catch(n){}return!1}var Fr={name:"KlineChart",props:{symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1H"},theme:{type:String,default:"light"},activeIndicators:{type:Array,default:function(){return[]}},realtimeEnabled:{type:Boolean,default:!1},userId:{type:Number,default:null}},emits:["retry","price-change","load","indicator-toggle"],setup:function(t,e){var i=e.emit,n=(0,h.IJ)([]),r=(0,h.KR)(!1),a=(0,h.KR)(null),s=(0,h.KR)(!1),u=(0,h.KR)(!0),p=null,v=(0,h.KR)(!1),g=(0,h.IJ)(null),m=(0,h.KR)(t.theme||"light"),y=(0,h.KR)(null),x=(0,h.KR)(5e3),_=(0,h.KR)(!1),w=(0,h.KR)(1e4),C=(0,h.KR)(0),S=function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(g.value){var e=Date.now(),i=Number(w.value||1e4);(t||!C.value||e-C.value>=i)&&(C.value=e,_t())}},k=(0,h.KR)([]),A=(0,h.KR)([]),T=(0,h.KR)([]),M=(0,h.KR)(null),I=(0,h.nI)(),E=I.proxy,D=(0,h.EW)(function(){return[{name:"line",title:E.$t("dashboard.indicator.drawing.line"),icon:"line"},{name:"horizontalLine",title:E.$t("dashboard.indicator.drawing.horizontalLine"),icon:"minus"},{name:"verticalLine",title:E.$t("dashboard.indicator.drawing.verticalLine"),icon:"column-width"},{name:"ray",title:E.$t("dashboard.indicator.drawing.ray"),icon:"arrow-right"},{name:"straightLine",title:E.$t("dashboard.indicator.drawing.straightLine"),icon:"menu"},{name:"parallelStraightLine",title:E.$t("dashboard.indicator.drawing.parallelLine"),icon:"menu"},{name:"priceLine",title:E.$t("dashboard.indicator.drawing.priceLine"),icon:"dollar"},{name:"priceChannelLine",title:E.$t("dashboard.indicator.drawing.priceChannel"),icon:"border"},{name:"fibonacciLine",title:E.$t("dashboard.indicator.drawing.fibonacciLine"),icon:"rise"},{name:"measure",title:E.$t("dashboard.indicator.drawing.measure"),icon:"drag"}]}),F=(0,h.KR)([{id:"sma",name:"SMA (简单移动平均)",shortName:"SMA",type:"line",defaultParams:{length:20}},{id:"ema",name:"EMA (指数移动平均)",shortName:"EMA",type:"line",defaultParams:{length:20}},{id:"rsi",name:"RSI (相对强弱)",shortName:"RSI",type:"line",defaultParams:{length:14}},{id:"macd",name:"MACD",shortName:"MACD",type:"macd",defaultParams:{fast:12,slow:26,signal:9}},{id:"bb",name:"布林带 (Bollinger Bands)",shortName:"BB",type:"band",defaultParams:{length:20,mult:2}},{id:"atr",name:"ATR (平均真实波幅)",shortName:"ATR",type:"line",defaultParams:{period:14}},{id:"cci",name:"CCI (商品通道指数)",shortName:"CCI",type:"line",defaultParams:{length:20}},{id:"williams",name:"Williams %R (威廉指标)",shortName:"W%R",type:"line",defaultParams:{length:14}},{id:"mfi",name:"MFI (资金流量指标)",shortName:"MFI",type:"line",defaultParams:{length:14}},{id:"adx",name:"ADX (平均趋向指数)",shortName:"ADX",type:"adx",defaultParams:{length:14}},{id:"obv",name:"OBV (能量潮)",shortName:"OBV",type:"line",defaultParams:{}},{id:"adosc",name:"ADOSC (积累/派发振荡器)",shortName:"ADOSC",type:"line",defaultParams:{fast:3,slow:10}},{id:"ad",name:"AD (积累/派发线)",shortName:"AD",type:"line",defaultParams:{}},{id:"kdj",name:"KDJ (随机指标)",shortName:"KDJ",type:"line",defaultParams:{period:9,k:3,d:3}}]),B=function(e){return t.activeIndicators.some(function(t){return t.id===e})},N=function(t){if(g.value){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[t]||t;if(M.value!==t){M.value=t;try{var n=["priceRangeMeasure"];if(n.includes(i)){if("function"!==typeof g.value.overrideOverlay)return void(M.value=null);g.value.overrideOverlay({name:i,lock:!1})}else{var r={name:i,lock:!1,extendData:{isDrawing:!0}},a=g.value.createOverlay(r);a?T.value.push(a):M.value=null}}catch(o){M.value=null}}else{M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(s){}}}},O=function(){if(g.value)try{T.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),T.value=[],M.value=null,"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(t){}},z=function(t){var e=B(t.id);if(e)i("indicator-toggle",{action:"remove",indicator:{id:t.id}});else{var n=(0,d.A)((0,d.A)({},t),{},{params:(0,d.A)({},t.defaultParams),calculate:null});i("indicator-toggle",{action:"add",indicator:n})}},W=(0,h.KR)(null),V=(0,h.KR)(!1),$=(0,h.KR)(!1),H=(0,h.KR)(!1),K=(0,h.EW)(function(){return"dark"===m.value?{backgroundColor:"#131722",textColor:"#d1d4dc",textColorSecondary:"#787b86",borderColor:"#2a2e39",gridLineColor:"#1f2943",gridLineColorDashed:"#363c4e",tooltipBg:"rgba(25, 27, 32, 0.95)",tooltipBorder:"#333",tooltipText:"#ccc",tooltipTextSecondary:"#888",axisLabelColor:"#787b86",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#2a2e39",dataZoomFiller:"rgba(41, 98, 255, 0.15)",dataZoomHandle:"#13c2c2",dataZoomText:"transparent",dataZoomBg:"#1f2943"}:{backgroundColor:"#fff",textColor:"#333",textColorSecondary:"#666",borderColor:"#e8e8e8",gridLineColor:"#e8e8e8",gridLineColorDashed:"#e8e8e8",tooltipBg:"rgba(255, 255, 255, 0.95)",tooltipBorder:"#e8e8e8",tooltipText:"#333",tooltipTextSecondary:"#666",axisLabelColor:"#666",splitAreaColor:["rgba(250,250,250,0.05)","rgba(200,200,200,0.02)"],dataZoomBorder:"#e8e8e8",dataZoomFiller:"rgba(24, 144, 255, 0.15)",dataZoomHandle:"#1890ff",dataZoomText:"#999",dataZoomBg:"#f0f2f5"}}),Y=function(t){return"dark"===m.value?["#13c2c2","#e040fb","#ffeb3b","#00e676","#ff6d00","#9c27b0"][t%6]:["#13c2c2","#9c27b0","#f57c00","#1976d2","#c2185b","#7b1fa2"][t%6]},X=function(){return new Promise(function(t,e){if(window.pyodide)return W.value=window.pyodide,$.value=!0,void t(window.pyodide);V.value=!0;var i="0.25.0",n=function(t){return t&&t.endsWith("/")?t:t?t+"/":t},r="/assets/pyodide/v".concat(i,"/full/"),a="https://cdn.jsdelivr.net/pyodide/v".concat(i,"/full/"),o=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_LOCAL_BASE||r),s=n({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_CDN_BASE||a),u=({NODE_ENV:"production",VUE_APP_API_BASE_URL:"/api",VUE_APP_PREVIEW:"false",BASE_URL:"/"}.VUE_APP_PYODIDE_PREFER_CDN||"").toString().toLowerCase(),d=!u||("true"===u||"1"===u||"yes"===u),h=function(t){return new Promise(function(e,i){var n=document.querySelector('script[data-pyodide-src="'.concat(t,'"]'));if(n)return"function"===typeof window.loadPyodide?e():(n.addEventListener("load",function(){return e()},{once:!0}),void n.addEventListener("error",function(){return i(new Error("Pyodide 脚本加载失败"))},{once:!0}));var r=document.createElement("script");r.dataset.pyodideSrc=t,r.src=t,r.onload=function(){return e()},r.onerror=function(){return i(new Error("Pyodide 脚本加载失败"))},document.head.appendChild(r)})},p=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:if("function"===typeof window.loadPyodide){e.n=1;break}throw new Error("loadPyodide 函数未找到");case 1:return e.n=2,window.loadPyodide({indexURL:i});case 2:return window.pyodide=e.v,e.n=3,window.pyodide.loadPackage(["pandas","numpy"]);case 3:W.value=window.pyodide,$.value=!0,V.value=!1,t(window.pyodide);case 4:return e.a(2)}},e)}));return function(t){return e.apply(this,arguments)}}();(0,c.A)((0,l.A)().m(function t(){var e,i,n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e=function(){var t=(0,c.A)((0,l.A)().m(function t(e){return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:return t.n=1,h(e+"pyodide.js");case 1:return t.n=2,p(e);case 2:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}(),t.p=1,!d){t.n=3;break}return t.n=2,e(s);case 2:t.n=4;break;case 3:return t.n=4,e(o);case 4:t.n=9;break;case 5:return t.p=5,i=t.v,t.p=6,t.n=7,e(d?o:s);case 7:t.n=9;break;case 8:throw t.p=8,n=t.v,n||i;case 9:return t.a(2)}},t,null,[[6,8],[1,5]])}))().catch(function(t){V.value=!1,H.value=!0,e(t)})})},U=function(t){if(!t||"string"!==typeof t)return null;try{var e={},i=t.match(/(\w+)\s*=\s*(\d+\.?\d*)/g);return i&&i.forEach(function(t){var i=t.split("=");if(2===i.length){var n=i[0].trim(),r=parseFloat(i[1].trim());isNaN(r)||(e[n]=r)}}),{params:e,plots:[],success:!0}}catch(n){return{params:{},plots:[],success:!1}}},G=function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,s,c,u,d,h,p,f,v,g,m,y,b,x,_,w,C,S=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(r=S.length>2&&void 0!==S[2]?S[2]:{},a=S.length>3&&void 0!==S[3]?S[3]:{},$.value&&W.value){e.n=5;break}if(!V.value){e.n=4;break}s=0;case 1:if(!(V.value&&s<30)){e.n=4;break}return e.n=2,new Promise(function(t){return setTimeout(t,500)});case 2:if(s++,!$.value||!W.value){e.n=3;break}return e.a(3,4);case 3:e.n=1;break;case 4:if($.value&&W.value){e.n=5;break}throw V.value?(V.value=!1,H.value=!0):H.value=!0,new Error("Python 引擎未就绪,请等待加载完成");case 5:if(e.p=5,c=i,u=a.is_encrypted||a.isEncrypted||0,!u&&!Rr(i,u)){e.n=11;break}if(d=a.user_id||a.userId||t.userId||r.userId,h=a.originalId||a.id||r.indicatorId,!d||!h){e.n=10;break}return e.p=6,e.n=7,Pr(c,d,h);case 7:c=e.v,e.n=9;break;case 8:throw e.p=8,_=e.v,new Error("代码解密失败,无法执行指标: "+(_.message||"未知错误"));case 9:e.n=11;break;case 10:throw new Error("缺少必要的解密参数(用户ID或指标ID),无法执行加密指标");case 11:return p=n.map(function(t){var e=t.timestamp||t.time;return e<1e10&&(e*=1e3),{time:Math.floor(e/1e3),open:parseFloat(t.open)||0,high:parseFloat(t.high)||0,low:parseFloat(t.low)||0,close:parseFloat(t.close)||0,volume:parseFloat(t.volume)||0}}),f=JSON.stringify(p),v=JSON.stringify(r||{}),g=f.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),m=v.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),y="\nimport json\nimport pandas as pd\nimport numpy as np\n\n# 递归清理 NaN 值的函数\ndef clean_nan(obj):\n if isinstance(obj, dict):\n return {k: clean_nan(v) for k, v in obj.items()}\n elif isinstance(obj, list):\n return [clean_nan(item) for item in obj]\n elif isinstance(obj, (pd.Series, np.ndarray)):\n return [None if (isinstance(x, float) and (np.isnan(x) or np.isinf(x))) else x for x in obj]\n elif isinstance(obj, (float, np.floating)):\n if np.isnan(obj) or np.isinf(obj):\n return None\n return float(obj)\n elif pd.isna(obj):\n return None\n else:\n return obj\n\n# 接收 JSON 数据\nraw_data = json.loads('".concat(g,"')\nparams = json.loads('").concat(m,"')\n\n# 将前端参数注入为指标代码可直接使用的变量(对齐回测/实盘执行环境)\n# 兼容多种命名(snake_case / camelCase)\ndef _get_param(key, default=None):\n if key in params:\n return params.get(key, default)\n # camelCase fallback\n camel = ''.join([key.split('_')[0]] + [p.capitalize() for p in key.split('_')[1:]])\n return params.get(camel, default)\n\ntry:\n leverage = float(_get_param('leverage', 1) or 1)\nexcept Exception:\n leverage = 1\n\ntrade_direction = _get_param('trade_direction', _get_param('tradeDirection', 'both')) or 'both'\n\ntry:\n initial_position = int(_get_param('initial_position', 0) or 0)\nexcept Exception:\n initial_position = 0\n\ntry:\n initial_avg_entry_price = float(_get_param('initial_avg_entry_price', 0.0) or 0.0)\nexcept Exception:\n initial_avg_entry_price = 0.0\n\ntry:\n initial_position_count = int(_get_param('initial_position_count', 0) or 0)\nexcept Exception:\n initial_position_count = 0\n\ntry:\n initial_last_add_price = float(_get_param('initial_last_add_price', 0.0) or 0.0)\nexcept Exception:\n initial_last_add_price = 0.0\n\ntry:\n initial_highest_price = float(_get_param('initial_highest_price', 0.0) or 0.0)\nexcept Exception:\n initial_highest_price = 0.0\n\n# 转换为 DataFrame\ndf = pd.DataFrame(raw_data)\n\n# 转换数据类型\ndf['open'] = df['open'].astype(float)\ndf['high'] = df['high'].astype(float)\ndf['low'] = df['low'].astype(float)\ndf['close'] = df['close'].astype(float)\ndf['volume'] = df['volume'].astype(float)\n\n# 用户代码(已解密)\n").concat(c,"\n\n# 构造输出(如果用户没有定义 output,则尝试从 result_json 获取)\nif 'output' not in locals():\n if 'result_json' in locals():\n output = json.loads(result_json)\n else:\n output = {\"plots\": []}\nelse:\n # 确保 output 是字典格式\n if isinstance(output, str):\n output = json.loads(output)\n\n# 清理 output 中的所有 NaN 值\noutput = clean_nan(output)\n\n# 返回 JSON 字符串\njson.dumps(output)\n"),e.n=12,W.value.runPythonAsync(y);case 12:if(b=e.v,b&&"string"===typeof b){e.n=13;break}throw new Error("Python 代码执行后未返回有效的 JSON 字符串,返回类型: ".concat((0,o.A)(b)));case 13:e.p=13,x=JSON.parse(b),e.n=15;break;case 14:throw e.p=14,w=e.v,new Error("JSON 解析失败: ".concat(w.message,"。可能是数据中包含 NaN 或其他无效值。"));case 15:if(x){e.n=16;break}return e.a(2,{plots:[],signals:[],calculatedVars:{}});case 16:return x.plots&&Array.isArray(x.plots)||(x.plots=[]),x.plots=x.plots.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t}),x.signals&&Array.isArray(x.signals)&&(x.signals=x.signals.map(function(t){return t.data&&Array.isArray(t.data)&&(t.data=t.data.map(function(t){return null===t||void 0===t||"number"===typeof t&&isNaN(t)?null:t})),t})),x.calculatedVars||(x.calculatedVars={}),e.a(2,x);case 17:throw e.p=17,C=e.v,new Error("Python 执行失败: ".concat(C.message));case 18:return e.a(2)}},e,null,[[13,14],[6,8],[5,17]])}));return function(t,i){return e.apply(this,arguments)}}();function j(t,e){for(var i=[],n=0;nn-e+1){var c=(t[o-1].high+t[o-1].low+t[o-1].close)/3;s>c?r+=l:sp&&h>0?o.push(h):o.push(0),p>h&&p>0?s.push(p):s.push(0)}for(var f=[],v=[],g=[],m=0;m=e-1){var w=f[m],C=v[m],S=g[m];if(0===w?(i.push(0),n.push(0)):(i.push(C/w*100),n.push(S/w*100)),m>=e-1){var k=i[m]+n[m],A=0===k?0:Math.abs(i[m]-n[m])/k*100;if(m===e-1)r.push(A);else if(m===e){var T=Math.abs(i[m-1]-n[m-1])/(i[m-1]+n[m-1])*100;r.push((T+A)/2)}else r.push((r[m-1]*(e-1)+A)/e)}}}return{adx:r,plusDI:i,minusDI:n}}function nt(t){for(var e=[],i=0,n=0;nt[n-1].close?i+=t[n].volume:t[n].close255?12:7)},0),m=g+2*h,y=f+2*p,b=(null===(i=a.extendData)||void 0===i?void 0:i.side)||(null===(n=a.extendData)||void 0===n?void 0:n.type)||"buy",x="buy"===b,_=x?u:u-y,w=d,C=w,S=x?_:_+y;return[{type:"line",attrs:{coordinates:[{x:c,y:C},{x:c,y:S}]},styles:{style:"stroke",color:l,dashedValue:[2,2]},ignoreEvent:!0},{type:"circle",attrs:{x:c,y:w,r:4},styles:{style:"fill",color:l},ignoreEvent:!0},{type:"rect",attrs:{x:c-m/2,y:_,width:m,height:y,r:4},styles:{style:"fill",color:l,borderSize:0},ignoreEvent:!0},{type:"text",attrs:{x:c,y:_+y/2,text:v,align:"center",baseline:"middle"},styles:{color:"#ffffff",size:f,weight:"bold",backgroundColor:l,borderRadius:5},ignoreEvent:!0}]}}),Ni({name:"priceRangeMeasure",totalStep:2,lock:!1,needDefaultPointFigure:!1,needDefaultXAxisFigure:!1,needDefaultYAxisFigure:!1,createPointFigures:function(t){var e=t.coordinates,i=t.overlay,n=t.ctx;if(!e[0]||!e[1])return[];var r=i.points[0],a=i.points[1];if(!r||!a)return[];var o=r.value,s=a.value,l=s-o,c=l/o*100,u=r.timestamp,d=a.timestamp,h=Math.abs(d-u),p="",f=Math.floor(h/864e5),v=Math.floor(h%864e5/36e5),g=Math.floor(h%36e5/6e4),m=Math.floor(h%6e4/1e3);p=f>0?"".concat(f,"天").concat(v>0?v+"小时":""):v>0?"".concat(v,"小时").concat(g>0?g+"分钟":""):g>0?"".concat(g,"分钟"):"".concat(m,"秒");var y=0;try{if(n&&n.chart){var b=n.chart.getData();if(b&&Array.isArray(b)&&b.length>0){var x=b.findIndex(function(t){return Math.abs(t.timestamp-u)<1e3}),_=b.findIndex(function(t){return Math.abs(t.timestamp-d)<1e3});x>=0&&_>=0&&(y=Math.abs(_-x))}}}catch(z){}var w=c>=0?"+".concat(c.toFixed(2),"%"):"".concat(c.toFixed(2),"%"),C=l>=0?"+".concat(l.toFixed(2)):"".concat(l.toFixed(2)),S="".concat(w," ").concat(C);y>0?(S+=" (".concat(y,"根"),p&&(S+=" / ".concat(p)),S+=")"):p&&(S+=" (".concat(p,")"));var k=l>=0,A=k?"#0ecb81":"#f6465d",T=k?"#0ecb81":"#f6465d",M=k?"rgba(14, 203, 129, 0.1)":"rgba(246, 70, 93, 0.1)",I=e[0].x,E=e[0].y,D=e[1].x,P=e[1].y,L=(I+D)/2,R=(E+P)/2,F=-20,B=12,N=7*S.length+16,O=B+8;return[{type:"line",attrs:{coordinates:[{x:I,y:E},{x:D,y:P}]},styles:{style:"stroke",color:A,size:2,dashedValue:[4,4]},ignoreEvent:!1},{type:"circle",attrs:{x:I,y:E,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"circle",attrs:{x:D,y:P,r:4},styles:{style:"fill",color:A},ignoreEvent:!1},{type:"rect",attrs:{x:L-N/2,y:R+F-O/2,width:N,height:O,r:4},styles:{style:"fill",color:M,borderSize:1,borderColor:A},ignoreEvent:!1},{type:"text",attrs:{x:L,y:R+F,text:S,align:"center",baseline:"middle"},styles:{color:T,size:B,weight:"bold"},ignoreEvent:!1}]}});var st=function(t){return t.map(function(t){var e=t.time||t.timestamp;return"string"===typeof e&&(e=parseInt(e)),e<1e10&&(e*=1e3),{timestamp:e,open:parseFloat(t.open),high:parseFloat(t.high),low:parseFloat(t.low),close:parseFloat(t.close),volume:parseFloat(t.volume||0)}}).filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)}).sort(function(t,e){return t.timestamp-e.timestamp})},lt=function(t){if(t.length>0){var e=t[t.length-1];if(t.length>1){var n=t[t.length-2],r=e.close.toFixed(2),a=(e.close-n.close)/n.close*100;i("price-change",{price:r,change:a})}else{var o=e.close.toFixed(2);i("price-change",{price:o,change:0})}}},ct=function(t){return t.map(function(t){return{time:Math.floor(t.timestamp/1e3),open:t.open,high:t.high,low:t.low,close:t.close,volume:t.volume}})},ut=function(t,e,i){var n=new Date(1e3*t),r=new Date(1e3*e);switch(i){case"1m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&n.getMinutes()===r.getMinutes();case"5m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/5)===Math.floor(r.getMinutes()/5);case"15m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/15)===Math.floor(r.getMinutes()/15);case"30m":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours()&&Math.floor(n.getMinutes()/30)===Math.floor(r.getMinutes()/30);case"1H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&n.getHours()===r.getHours();case"4H":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate()&&Math.floor(n.getHours()/4)===Math.floor(r.getHours()/4);case"1D":return n.getFullYear()===r.getFullYear()&&n.getMonth()===r.getMonth()&&n.getDate()===r.getDate();case"1W":var a=Math.floor((n.getTime()-new Date(n.getFullYear(),0,1).getTime())/6048e5),o=Math.floor((r.getTime()-new Date(r.getFullYear(),0,1).getTime())/6048e5);return n.getFullYear()===r.getFullYear()&&a===o;default:return t===e}},dt=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,o,s,c,d,p,v,m=arguments;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(i=m.length>0&&void 0!==m[0]&&m[0],t.symbol){e.n=1;break}return e.a(2);case 1:if(!r.value||i){e.n=2;break}return e.a(2);case 2:return r.value=!0,a.value=null,e.p=3,o=[],e.p=4,e.n=5,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500}});case 5:if(s=e.v,1!==s.code||!s.data||!Array.isArray(s.data)){e.n=6;break}o=st(s.data),e.n=7;break;case 6:throw c=s.msg||"获取K线数据失败","tiingo_subscription"===s.hint&&(c=E.$t("dashboard.indicator.error.tiingoSubscription")||"Forex 1-minute data requires Tiingo paid subscription"),new Error(c);case 7:e.n=9;break;case 8:throw e.p=8,p=e.v,p;case 9:if(o&&0!==o.length){e.n=10;break}throw new Error("未获取到K线数据");case 10:n.value=o,u.value=!0,d=ct(o),lt(d),(0,h.dY)(function(){if(g.value){var e=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(e.length>0&&g.value){try{g.value.applyNewData(e)}catch(i){g.value.applyNewData(e)}setTimeout(function(){g.value&&_t()},100)}}else mt();t.realtimeEnabled&&(gt(),vt())}),e.n=12;break;case 11:if(e.p=11,v=e.v,a.value=E.$t("dashboard.indicator.error.loadDataFailed")+": "+(v.message||E.$t("dashboard.indicator.error.loadDataFailedDesc")),n.value=[],g.value)try{g.value.applyNewData([])}catch(l){}case 12:return e.p=12,r.value=!1,e.f(12);case 13:return e.a(2)}},e,null,[[4,8],[3,11,12,13]])}));return function(){return e.apply(this,arguments)}}(),ht=function(){var e=(0,c.A)((0,l.A)().m(function e(i){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.symbol&&n.value&&0!==n.value.length){e.n=1;break}return e.a(2);case 1:if(!s.value&&!p){e.n=6;break}if(!p){e.n=5;break}return e.p=2,e.n=3,p;case 3:e.n=5;break;case 4:e.p=4,e.v;case 5:return e.a(2);case 6:if(u.value){e.n=7;break}return g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 7:return s.value=!0,p=(0,c.A)((0,l.A)().m(function e(){var r,a,o,c,d,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return e.p=1,r=Math.floor(i/1e3),e.n=2,(0,f.Ay)({url:"/api/indicator/kline",method:"get",params:{market:t.market,symbol:t.symbol,timeframe:t.timeframe,limit:500,before_time:r}});case 2:if(a=e.v,1!==a.code||!a.data||!Array.isArray(a.data)){e.n=5;break}if(o=st(a.data),0!==o.length){e.n=3;break}return u.value=!1,g.value&&"function"===typeof g.value.noMoreData&&g.value.noMoreData(),e.a(2);case 3:if(c=o.filter(function(t){return t.timestamp0&&(r=st(i.data),a=(0,R.A)(n.value),r.length>0&&(o=Math.floor(r[r.length-1].timestamp/1e3),s=Math.floor(a[a.length-1].timestamp/1e3),ut(o,s,t.timeframe)?(c=a[a.length-1],u=r[r.length-1],a[a.length-1]={timestamp:c.timestamp,open:c.open,high:Math.max(c.high,u.high),low:Math.min(c.low,u.low),close:u.close,volume:u.volume},n.value=a,d=ct(n.value),lt(d),g.value&&"function"===typeof g.value.updateData?(h=n.value.length-1,g.value.updateData(a[h]),S(!1)):g.value&&(g.value.applyNewData(n.value),S(!1))):o>s&&(p=r.filter(function(e){var i=Math.floor(e.timestamp/1e3);return!a.some(function(e){var n=Math.floor(e.timestamp/1e3);return ut(i,n,t.timeframe)})}),p.length>0&&(n.value=[].concat((0,R.A)(a),(0,R.A)(p)),n.value.length>500&&(n.value=n.value.slice(-500)),v=ct(n.value),lt(v),g.value&&"function"===typeof g.value.applyMoreData?(g.value.applyMoreData(p),S(!0)):g.value&&(g.value.applyNewData(n.value),S(!0)))))),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.a(2)}},e,null,[[1,3]])}));return function(){return e.apply(this,arguments)}}(),vt=function(){y.value&&clearInterval(y.value);var e={"1m":5e3,"5m":1e4,"15m":15e3,"30m":3e4,"1H":6e4,"4H":3e5,"1D":6e5,"1W":18e5},i=e[t.timeframe]||1e4;x.value=Math.min(i,1e3),t.realtimeEnabled&&t.symbol&&n.value.length>0&&(y.value=setInterval(function(){!r.value&&t.symbol&&n.value&&n.value.length>0&&ft()},x.value))},gt=function(){y.value&&(clearInterval(y.value),y.value=null)},mt=function(){var t=document.getElementById("kline-chart-container");if(t)if(0!==t.clientWidth&&0!==t.clientHeight){if(g.value){try{g.value.destroy()}catch(y){}g.value=null}try{var e=document.getElementById("kline-chart-container");if(!e)throw new Error("容器元素不存在");try{g.value=Ar(e,{drawingBarVisible:!0,overlay:{visible:!0}})}catch(y){g.value=Ar(e)}if(g.value&&"function"===typeof g.value.setDrawingBarVisible?g.value.setDrawingBarVisible(!0):g.value&&"function"===typeof g.value.setDrawingBar?g.value.setDrawingBar(!0):g.value&&"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0),!g.value)throw new Error("图表初始化失败:无法创建图表实例");if(g.value&&("function"===typeof g.value.setDrawingBarVisible&&g.value.setDrawingBarVisible(!0),"function"===typeof g.value.setDrawingBar&&g.value.setDrawingBar(!0),"function"===typeof g.value.enableDrawing&&g.value.enableDrawing(!0)),bt(),g.value&&"function"===typeof g.value.subscribeAction){if(g.value.subscribeAction("onOverlayCreated",function(t){if(M.value&&t&&t.id){var e={line:"segment",horizontalLine:"horizontalStraightLine",verticalLine:"verticalStraightLine",ray:"rayLine",straightLine:"straightLine",parallelStraightLine:"parallelStraightLine",priceLine:"priceLine",priceChannelLine:"priceChannelLine",fibonacciLine:"fibonacciLine",measure:"priceRangeMeasure"},i=e[M.value];if(!t.name||t.name===i||"priceRangeMeasure"===i){T.value.push(t.id),M.value=null;try{"function"===typeof g.value.overrideOverlay&&g.value.overrideOverlay(null)}catch(y){}}}}),"function"===typeof g.value.subscribeAction)try{g.value.subscribeAction("onOverlayComplete",function(t){M.value&&t&&t.id&&(T.value.push(t.id),M.value=null)})}catch(y){}g.value.subscribeAction("onOverlayRemoved",function(t){var e=T.value.indexOf(t);e>-1&&T.value.splice(e,1)})}if(g.value&&"function"===typeof g.value.subscribeAction){var i=null,r=!1;g.value.subscribeAction("onVisibleRangeChange",function(){var t=(0,c.A)((0,l.A)().m(function t(e){var a,o,c,d,h,f;return(0,l.A)().w(function(t){while(1)switch(t.n){case 0:if(!e||"number"!==typeof e.from){t.n=5;break}if(r){t.n=1;break}return i=e.from,r=!0,setTimeout(function(){v.value=!0},1e3),t.a(2);case 1:if(v.value){t.n=2;break}return i=e.from,t.a(2);case 2:if(!(s.value&&e.from<=0)){t.n=3;break}try{g.value&&"function"===typeof g.value.setVisibleRange&&(a=n.value.length,a>0&&(o=g.value.getVisibleRange(),o&&(c=Math.ceil((o.to-o.from)*a/100),d=.1,h=Math.min(100,d+c/a*100),g.value.setVisibleRange(d,h))))}catch(y){}return t.a(2);case 3:if(!(e.from<=5&&!s.value&&!p&&u.value&&v.value)){t.n=4;break}if(!(null!==i&&i>e.from)){t.n=4;break}if(!(n.value.length>0)){t.n=4;break}return f=n.value[0].timestamp,t.n=4,ht(f);case 4:i=e.from;case 5:return t.a(2)}},t)}));return function(e){return t.apply(this,arguments)}}())}if(n.value&&n.value.length>0){var o=n.value.filter(function(t){return t.timestamp&&!isNaN(t.open)&&!isNaN(t.high)&&!isNaN(t.low)&&!isNaN(t.close)});if(o.length>0){try{g.value.applyNewData(o)}catch(y){try{g.value.applyNewData(o)}catch(b){}}try{g.value.createIndicator("VOL",!1,{height:100,dragEnabled:!0})}catch(y){}(0,h.dY)(function(){_t()})}}window.addEventListener("resize",yt)}catch(a){a.value=E.$t("dashboard.indicator.error.chartInitFailed")+": "+(a.message||"未知错误")}}else{var d=0,f=10,m=function(){var t=document.getElementById("kline-chart-container");t&&t.clientWidth>0&&t.clientHeight>0?mt():d0&&t.clientHeight>0&&mt()}},bt=function(){if(g.value){var t=K.value,e="dark"===m.value;g.value.setStyles({grid:{show:!0,horizontal:{show:!0,color:t.gridLineColor,style:"dashed",size:1},vertical:{show:!1}},candle:{priceMark:{show:!0,high:{show:!0,color:t.axisLabelColor},low:{show:!0,color:t.axisLabelColor}},tooltip:{showRule:"always",showType:"standard",labels:[E.$t("dashboard.indicator.tooltip.time"),E.$t("dashboard.indicator.tooltip.open"),E.$t("dashboard.indicator.tooltip.high"),E.$t("dashboard.indicator.tooltip.low"),E.$t("dashboard.indicator.tooltip.close"),E.$t("dashboard.indicator.tooltip.volume")],values:function(t){var e=new Date(t.timestamp);return["".concat(e.getFullYear(),"-").concat(e.getMonth()+1,"-").concat(e.getDate()," ").concat(e.getHours(),":").concat(e.getMinutes()),t.open.toFixed(2),t.high.toFixed(2),t.low.toFixed(2),t.close.toFixed(2),t.volume.toFixed(0)]}},bar:{upColor:e?"#0ecb81":"#13c2c2",downColor:e?"#f6465d":"#fa541c",noChangeColor:t.borderColor}},indicator:{tooltip:{showRule:"always",showType:"standard"}},xAxis:{show:!0,axisLine:{show:!0,color:t.borderColor}},yAxis:{show:!0,axisLine:{show:!1}},crosshair:{show:!0,horizontal:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}},vertical:{show:!0,line:{show:!0,style:"dashed",color:t.gridLineColor,size:1}}},watermark:{show:!1}})}},xt=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:2,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];try{var o={name:t,shortName:t,calc:e,figures:i,calcParams:n,precision:r,series:a?"price":"normal"};return ri(o),!0}catch(s){return!(!s.message||!s.message.includes("already registered"))}},_t=function(){var e=(0,c.A)((0,l.A)().m(function e(){var i,r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!_.value){e.n=1;break}return e.a(2);case 1:if(g.value&&0!==n.value.length){e.n=2;break}return e.a(2);case 2:_.value=!0,e.p=3;try{A.value.length>0&&g.value&&(A.value.forEach(function(t){try{"function"===typeof g.value.removeOverlay?g.value.removeOverlay(t):"function"===typeof g.value.removeOverlayById&&g.value.removeOverlayById(t)}catch(e){}}),A.value=[])}catch(s){}try{k.value.length>0&&(k.value.forEach(function(t){var e="string"===typeof t?t:t.name,i="string"===typeof t?void 0:t.paneId;i?g.value.removeIndicator(i,e):(g.value.removeIndicator("candle_pane",e),g.value.removeIndicator(e))}),k.value=[])}catch(s){}i=ct(n.value),r=(0,l.A)().m(function e(){var n,r,a,s,c,u,d,h,p,f,v,m,y,x,_,w,C,S,T,M,I,E,D,P,F,B,N,O,z,W,$,K,X,U,st,lt,ct,ut,dt,ht,pt,ft,vt,gt,mt,yt,bt,_t,wt,Ct,St,kt,At,Tt,Mt,It,Et,Dt,Pt,Lt,Rt,Ft,Bt,Nt,Ot,zt,Wt,Vt,$t,Ht,Kt,Yt,Xt,Ut,Gt,jt,qt,Zt,Jt,Qt,te,ee,ie,ne,re,ae,oe,se,le,ce,ue,de,he,pe,fe,ve,ge,me,ye,be,xe,_e,we,Ce,Se,ke,Ae,Te,Me,Ie,Ee,De,Pe,Le,Re,Fe,Be,Ne,Oe,ze,We,Ve,$e,He,Ke,Ye,Xe,Ue,Ge,je,qe,Ze,Je,Qe,ti,ei,ii,ni,ri,ai,oi,si,li,ci,ui,di,hi,pi,fi,vi,gi,mi,yi,bi;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(n=t.activeIndicators[o],e.p=1,"python"!==n.type){e.n=31;break}if(n.code){e.n=2;break}return e.a(2,0);case 2:if(e.p=2,!n.calculate||"function"!==typeof n.calculate){e.n=15;break}return e.n=3,n.calculate(i,n.params||{});case 3:if(r=e.v,a=[],r&&r.plots&&Array.isArray(r.plots)&&(a=(0,R.A)(r.plots)),!(r&&r.signals&&Array.isArray(r.signals))){e.n=14;break}s=(0,b.A)(r.signals),e.p=4,s.s();case 5:if((c=s.n()).done){e.n=11;break}if(u=c.value,!(u.data&&Array.isArray(u.data)&&u.data.length>0)){e.n=10;break}for(d=[],h=0;h0&&g.value){E=(0,b.A)(f);try{for(E.s();!(D=E.n()).done;){P=D.value;try{F=P.timestamp,F<1e10&&(F*=1e3),B=P.text,"function"===typeof g.value.createOverlay&&(N=g.value.createOverlay({name:"signalTag",points:[{timestamp:F,value:P.price},{timestamp:F,value:P.anchorPrice}],extendData:{text:B,color:P.color,side:P.side,action:P.action,price:P.price},lock:!0},"candle_pane"),N&&A.value.push(N))}catch(l){}}}catch(xi){E.e(xi)}finally{E.f()}}case 10:e.n=5;break;case 11:e.n=13;break;case 12:e.p=12,mi=e.v,s.e(mi);case 13:return e.p=13,s.f(),e.f(13);case 14:if(a.length>0&&(O=a.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),O.length>0)){for(z=[],W={},$=0;$0)){e.n=23;break}for(_t=[],wt=0;wt0&&g.value){Bt=(0,b.A)(St);try{for(Bt.s();!(Nt=Bt.n()).done;){Ot=Nt.value;try{zt=Ot.timestamp,zt<1e10&&(zt*=1e3),Wt=Ot.text,"function"===typeof g.value.createOverlay&&(Vt=g.value.createOverlay({name:"signalTag",points:[{timestamp:zt,value:Ot.price},{timestamp:zt,value:Ot.anchorPrice}],extendData:{text:Wt,color:Ot.color,side:Ot.side,action:Ot.action,price:Ot.price},lock:!0},"candle_pane"),Vt&&A.value.push(Vt))}catch(l){}}}catch(xi){Bt.e(xi)}finally{Bt.f()}}case 23:e.n=18;break;case 24:e.n=26;break;case 25:e.p=25,yi=e.v,mt.e(yi);case 26:return e.p=26,mt.f(),e.f(26);case 27:if(gt.length>0&&($t=gt.filter(function(t){return t.data&&Array.isArray(t.data)&&t.data.length>0}),$t.length>0)){for(Ht=[],Kt={},Yt=0;Yt<$t.length;Yt++)Xt=$t[Yt],Ut=Xt.name||"PLOT_".concat(Yt),Gt=Ut.toLowerCase().replace(/\s+/g,"_").replace(/[^a-z0-9_]/g,"_"),jt=Xt.color||Y(Yt),qt=Xt.type||"line",Ht.push({key:Gt,title:Xt.name||Ut,type:qt,color:jt}),Kt[Gt]=Xt.data;Zt=$t.every(function(t){return!1!==t.overlay}),Jt="".concat(n.id,"_combined"),vt&&vt.name&&(Jt=vt.name);try{Qt=xt(Jt,function(t){for(var e=[],i=0;i0&&(0,h.dY)(function(){g.value&&_t()})},{deep:!0}),(0,h.wB)(function(){return t.realtimeEnabled},function(t){t?vt():gt()}),(0,h.sV)((0,c.A)((0,l.A)().m(function e(){return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.n=1,(0,h.dY)();case 1:return!t.theme||"dark"!==t.theme&&"light"!==t.theme||(m.value=t.theme),e.p=2,e.n=3,X();case 3:e.n=5;break;case 4:e.p=4,e.v,H.value=!0;case 5:(0,h.dY)(function(){setTimeout(function(){!g.value&&t.symbol&&mt()},300)});case 6:return e.a(2)}},e,null,[[2,4]])}))),(0,h.xo)(function(){gt(),g.value&&(g.value.destroy(),g.value=null),window.removeEventListener("resize",yt)}),{klineData:n,loading:r,error:a,loadingHistory:s,chartRef:g,chartTheme:m,themeConfig:K,getIndicatorColor:Y,handleRetry:wt,loadingPython:V,pythonReady:$,pyodideLoadFailed:H,formatKlineData:st,updatePricePanel:lt,isSameTimeframe:ut,loadKlineData:dt,loadMoreHistoryData:pt,updateKlineRealtime:ft,startRealtime:vt,stopRealtime:gt,initChart:mt,handleResize:yt,updateChartTheme:bt,updateIndicators:_t,executePythonStrategy:G,parsePythonStrategy:U,indicatorButtons:F,isIndicatorActive:B,toggleIndicator:z,drawingTools:D,activeDrawingTool:M,selectDrawingTool:N,clearAllDrawings:O}}},Br=Fr,Nr=(0,T.A)(Br,E,D,!1,null,"5f0b12e1",null),Or=Nr.exports,zr=function(){var t=this,e=t._self._c;return e("a-modal",{staticClass:"backtest-modal",attrs:{title:t.$t("dashboard.indicator.backtest.title"),visible:t.visible,width:1100,maskClosable:!1},on:{cancel:t.handleCancel}},[e("div",{staticClass:"backtest-content"},[e("a-steps",{staticStyle:{"margin-bottom":"16px"},attrs:{current:t.currentStep,size:"small"}},[e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.strategy.title"),description:t.$t("dashboard.indicator.backtest.steps.strategy.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.trading.title"),description:t.$t("dashboard.indicator.backtest.steps.trading.desc")}}),e("a-step",{attrs:{title:t.$t("dashboard.indicator.backtest.steps.results.title"),description:t.$t("dashboard.indicator.backtest.steps.results.desc")}})],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2!==t.currentStep,expression:"currentStep !== 2"}],staticClass:"config-section"},[e("a-form",{attrs:{form:t.form,"label-col":t.labelCol,"wrapper-col":t.wrapperCol}},[e("div",{directives:[{name:"show",rawName:"v-show",value:0===t.currentStep,expression:"currentStep === 0"}]},[e("a-collapse",{staticStyle:{background:"#fafafa"},attrs:{bordered:!1},model:{value:t.step1CollapseKeys,callback:function(e){t.step1CollapseKeys=e},expression:"step1CollapseKeys"}},[e("a-collapse-panel",{key:"risk",attrs:{header:t.$t("dashboard.indicator.backtest.panel.risk")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.stopLossPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["stopLossPct",{initialValue:0}],expression:"['stopLossPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.takeProfitPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["takeProfitPct",{initialValue:0}],expression:"['takeProfitPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trailingEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrailingToggle}})],1)],1),e("a-col",{attrs:{span:12}})],1),t.trailingEnabledUi?[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingStopPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingStopPct",{initialValue:0}],expression:"['trailingStopPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trailingActivationPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trailingActivationPct",{initialValue:0}],expression:"['trailingActivationPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1)]:t._e()],2),e("a-collapse-panel",{key:"scale",attrs:{header:t.$t("dashboard.indicator.backtest.panel.scale")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onTrendAddToggle}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['dcaAddEnabled', { valuePropName: 'checked', initialValue: false }]"}],on:{change:t.onDcaAddToggle}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddStepPct",{initialValue:0}],expression:"['trendAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddStepPct",{initialValue:0}],expression:"['dcaAddStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddSizePct",{initialValue:0}],expression:"['trendAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddSizePct",{initialValue:0}],expression:"['dcaAddSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4},on:{change:t.onScaleParamsChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendAddMaxTimes",{initialValue:0}],expression:"['trendAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.dcaAddMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["dcaAddMaxTimes",{initialValue:0}],expression:"['dcaAddMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:50,step:1,precision:0},on:{change:t.onScaleParamsChange}})],1)],1)],1)],1),e("a-collapse-panel",{key:"reduce",attrs:{header:t.$t("dashboard.indicator.backtest.panel.reduce")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['trendReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceEnabled")}},[e("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceEnabled",{valuePropName:"checked",initialValue:!1}],expression:"['adverseReduceEnabled', { valuePropName: 'checked', initialValue: false }]"}]})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceStepPct",{initialValue:0}],expression:"['trendReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceStepPct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceStepPct",{initialValue:0}],expression:"['adverseReduceStepPct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:1e3,step:.01,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceSizePct",{initialValue:0}],expression:"['trendReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceSizePct")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceSizePct",{initialValue:0}],expression:"['adverseReduceSizePct', { initialValue: 0 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:100,step:.1,precision:4}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.trendReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["trendReduceMaxTimes",{initialValue:0}],expression:"['trendReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.adverseReduceMaxTimes")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["adverseReduceMaxTimes",{initialValue:0}],expression:"['adverseReduceMaxTimes', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:50,step:1,precision:0}})],1)],1)],1)],1),e("a-collapse-panel",{key:"position",attrs:{header:t.$t("dashboard.indicator.backtest.panel.position")}},[e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.entryPct"),help:t.$t("dashboard.indicator.backtest.hint.entryPctMax",{maxPct:Number(t.entryPctMaxUi||0).toFixed(0)})}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["entryPct",{initialValue:100}],expression:"['entryPct', { initialValue: 100 }]"}],staticStyle:{width:"220px"},attrs:{min:0,max:t.entryPctMaxUi,step:.1,precision:4},on:{change:t.onEntryPctChange}})],1)],1),e("a-col",{attrs:{span:12}})],1)],1)],1)],1),e("div",{directives:[{name:"show",rawName:"v-show",value:1===t.currentStep,expression:"currentStep === 1"}]},[e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:t.combinedAlertType,"show-icon":""}},[e("template",{slot:"message"},[e("div",{staticStyle:{display:"flex","align-items":"center","flex-wrap":"wrap",gap:"8px"}},[e("span",[e("strong",[t._v("Symbol:")]),t._v(" "+t._s(t.symbol||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Market:")]),t._v(" "+t._s(t.market||"-")+" "),e("span",{staticStyle:{color:"#999",margin:"0 6px"}},[t._v("|")]),e("strong",[t._v("Timeframe:")]),t._v(" "+t._s(t.selectedTimeframe||t.timeframe||"-")+" ")]),t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"high"===t.precisionInfo.precision?"thunderbolt":"clock-circle"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.precisionMode"))+": "),e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"high"===t.precisionInfo.precision?"green":"blue",size:"small"}},[t._v(" "+t._s(t.precisionInfo.timeframe)+" ")]),e("span",{staticStyle:{color:"#666","margin-left":"6px"}},[t._v(" ("+t._s(t.$t("dashboard.indicator.backtest.estimatedCandles",{count:t.precisionInfo.estimated_candles?t.precisionInfo.estimated_candles.toLocaleString():"-"}))+") ")])],1):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"margin-left":"12px","border-left":"1px solid #d9d9d9","padding-left":"12px",color:"#faad14"}},[e("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"warning"}}),t._v(" "+t._s(t.$t("dashboard.indicator.backtest.standardModeWarning"))+" ")],1):t._e()])]),e("template",{slot:"description"},[t.precisionInfo&&t.precisionInfo.enabled?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s("high"===t.precisionInfo.precision?t.$t("dashboard.indicator.backtest.highPrecisionDesc"):t.$t("dashboard.indicator.backtest.mediumPrecisionDesc"))+" ")]):t.precisionInfo&&!t.precisionInfo.enabled&&t.market&&"crypto"===t.market.toLowerCase()?e("span",{staticStyle:{"font-size":"12px",color:"#888"}},[t._v(" "+t._s(t.precisionInfo.message||t.$t("dashboard.indicator.backtest.standardModeDesc"))+" ")]):t._e()])],2),e("div",{staticClass:"date-quick-select",staticStyle:{"margin-bottom":"12px"}},[e("span",{staticStyle:{"margin-right":"8px",color:"#666","font-size":"13px"}},[t._v(t._s(t.$t("dashboard.indicator.backtest.quickSelect")||"快速选择")+":")]),e("a-button-group",{attrs:{size:"small"}},t._l(t.datePresets,function(i){return e("a-button",{key:i.key,attrs:{type:t.selectedDatePreset===i.key?"primary":"default"},on:{click:function(e){return t.applyDatePreset(i)}}},[t._v(t._s(i.label))])}),1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.startDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["startDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.startDateRequired")}],initialValue:t.defaultStartDate}],expression:"['startDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.startDateRequired') }], initialValue: defaultStartDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledStartDate,placeholder:t.$t("dashboard.indicator.backtest.selectStartDate")},on:{change:t.onDateChange}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.endDate")}},[e("a-date-picker",{directives:[{name:"decorator",rawName:"v-decorator",value:["endDate",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.endDateRequired")}],initialValue:t.defaultEndDate}],expression:"['endDate', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.endDateRequired') }], initialValue: defaultEndDate }]"}],staticStyle:{width:"100%"},attrs:{"disabled-date":t.disabledEndDate,placeholder:t.$t("dashboard.indicator.backtest.selectEndDate")},on:{change:t.onDateChange}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.initialCapital")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["initialCapital",{rules:[{required:!0,message:t.$t("dashboard.indicator.backtest.initialCapitalRequired")}],initialValue:1e4}],expression:"['initialCapital', { rules: [{ required: true, message: $t('dashboard.indicator.backtest.initialCapitalRequired') }], initialValue: 10000 }]"}],staticStyle:{width:"100%"},attrs:{min:1e3,step:1e4,precision:2,formatter:function(t){return"$ ".concat(t).replace(/\B(?=(\d{3})+(?!\d))/g,",")},parser:function(t){return t.replace(/\$\s?|(,*)/g,"")}}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.commission")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["commission",{initialValue:.02}],expression:"['commission', { initialValue: 0.02 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}}),e("div",{staticClass:"field-hint"},[t._v(t._s(t.$t("dashboard.indicator.backtest.commissionHint")))])],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.field.slippage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["slippage",{initialValue:0}],expression:"['slippage', { initialValue: 0 }]"}],staticStyle:{width:"100%"},attrs:{min:0,max:10,step:.01,precision:4}})],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.leverage")}},[e("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:["leverage",{initialValue:1}],expression:"['leverage', { initialValue: 1 }]"}],staticStyle:{width:"100%"},attrs:{min:1,max:125,step:1,precision:0,formatter:function(t){return"".concat(t,"x")},parser:function(t){return t.replace("x","")}}})],1)],1)],1),e("a-row",{attrs:{gutter:24}},[e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.tradeDirection")}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["tradeDirection",{initialValue:"long"}],expression:"['tradeDirection', { initialValue: 'long' }]"}],staticStyle:{width:"100%"}},[e("a-select-option",{attrs:{value:"long"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.longOnly"))+" ")]),e("a-select-option",{attrs:{value:"short"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.shortOnly"))+" ")]),e("a-select-option",{attrs:{value:"both"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.both"))+" ")])],1)],1)],1),e("a-col",{attrs:{span:12}},[e("a-form-item",{attrs:{label:t.$t("dashboard.indicator.backtest.timeframe")}},[e("a-select",{staticStyle:{width:"100%"},on:{change:t.onTimeframeChange},model:{value:t.selectedTimeframe,callback:function(e){t.selectedTimeframe=e},expression:"selectedTimeframe"}},[e("a-select-option",{attrs:{value:"1m"}},[t._v("1m")]),e("a-select-option",{attrs:{value:"5m"}},[t._v("5m")]),e("a-select-option",{attrs:{value:"15m"}},[t._v("15m")]),e("a-select-option",{attrs:{value:"30m"}},[t._v("30m")]),e("a-select-option",{attrs:{value:"1H"}},[t._v("1H")]),e("a-select-option",{attrs:{value:"4H"}},[t._v("4H")]),e("a-select-option",{attrs:{value:"1D"}},[t._v("1D")]),e("a-select-option",{attrs:{value:"1W"}},[t._v("1W")])],1)],1)],1)],1)],1)])],1),e("div",{directives:[{name:"show",rawName:"v-show",value:2===t.currentStep&&t.hasResult,expression:"currentStep === 2 && hasResult"}],staticClass:"result-section"},[t.backtestRunId?e("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"success","show-icon":"",message:t.$t("dashboard.indicator.backtest.savedRunId",{id:t.backtestRunId})}}):t._e(),e("div",{staticClass:"metrics-cards"},[e("div",{staticClass:"metric-card",class:{positive:t.result.totalReturn>0,negative:t.result.totalReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.totalReturn)))]),e("div",{staticClass:"metric-amount"},[t._v(t._s(t.formatMoney(t.result.totalProfit)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.annualReturn>0,negative:t.result.annualReturn<0}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.annualReturn")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.annualReturn)))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.maxDrawdown")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.maxDrawdown)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.sharpeRatio")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.sharpeRatio.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.winRate")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.formatPercent(t.result.winRate)))])]),e("div",{staticClass:"metric-card",class:{positive:t.result.profitFactor>=1.5,negative:t.result.profitFactor<1}},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.profitFactor")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.profitFactor.toFixed(2)))])]),e("div",{staticClass:"metric-card"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalTrades")))]),e("div",{staticClass:"metric-value"},[t._v(t._s(t.result.totalTrades))])]),e("div",{staticClass:"metric-card negative"},[e("div",{staticClass:"metric-label"},[t._v(t._s(t.$t("dashboard.indicator.backtest.totalCommission")))]),e("div",{staticClass:"metric-value"},[t._v("-$"+t._s(t.result.totalCommission?t.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),e("div",{staticClass:"chart-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.equityCurve")))]),e("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),e("div",{staticClass:"trades-section"},[e("div",{staticClass:"chart-title"},[t._v(t._s(t.$t("dashboard.indicator.backtest.tradeHistory")))]),e("a-table",{attrs:{columns:t.tradeColumns,"data-source":t.result.trades,pagination:{pageSize:5,size:"small"},size:"small",scroll:{x:600}},scopedSlots:t._u([{key:"type",fn:function(i){return[e("a-tag",{attrs:{color:t.getTradeTypeColor(i)}},[t._v(" "+t._s(t.getTradeTypeText(i))+" ")])]}},{key:"balance",fn:function(i){return[e("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[t._v(" $"+t._s(i?i.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(i){return[e("span",{style:{color:i>0?"#52c41a":i<0?"#f5222d":"#666"}},[t._v(" "+t._s(t.formatMoney(i))+" ")])]}}])})],1)],1),t.loading?e("div",{staticClass:"loading-overlay"},[e("div",{staticClass:"loading-content"},[e("div",{staticClass:"loading-animation"},[e("div",{staticClass:"chart-bars"},[e("div",{staticClass:"bar bar1"}),e("div",{staticClass:"bar bar2"}),e("div",{staticClass:"bar bar3"}),e("div",{staticClass:"bar bar4"}),e("div",{staticClass:"bar bar5"})])]),e("div",{staticClass:"loading-text"},[t._v(t._s(t.$t("dashboard.indicator.backtest.running")))]),e("div",{staticClass:"loading-subtext"},[t._v(t._s(t.loadingTip))])])]):t._e()],1),e("template",{slot:"footer"},[e("div",{staticStyle:{display:"flex","justify-content":"space-between","align-items":"center",width:"100%"}},[e("div",[t.currentStep>0?e("a-button",{attrs:{disabled:t.loading},on:{click:t.handlePrev}},[t._v(t._s(t.$t("dashboard.indicator.backtest.prev")))]):t._e()],1),e("div",[e("a-button",{attrs:{disabled:t.loading},on:{click:t.handleCancel}},[t._v(t._s(t.$t("dashboard.indicator.backtest.close")))]),t.currentStep<1?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleNext}},[t._v(t._s(t.$t("dashboard.indicator.backtest.next")))]):1===t.currentStep?e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",loading:t.loading},on:{click:t.handleRunBacktest}},[t._v(t._s(t.$t("dashboard.indicator.backtest.run")))]):e("a-button",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",disabled:t.loading},on:{click:t.handleRerun}},[t._v(t._s(t.$t("dashboard.indicator.backtest.rerun")))])],1)])])],2)},Wr=[],Vr=i(95093),$r=i.n(Vr),Hr=i(15014),Kr={name:"BacktestModal",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicator:{type:Object,default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:"1D"}},data:function(){return{form:this.$form.createForm(this),loading:!1,loadingTip:"",loadingTimer:null,currentStep:0,hasResult:!1,backtestRunId:null,step1CollapseKeys:["risk"],trailingEnabledUi:!1,entryPctMaxUi:100,precisionInfo:null,selectedDatePreset:null,selectedTimeframe:"1D",result:{totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},equityChart:null,tradeColumns:[]}},computed:{maxBacktestRange:function(){var t=this.selectedTimeframe||this.timeframe||"1D";return"1m"===t?{days:30,label:"1个月"}:"5m"===t?{days:180,label:"6个月"}:["15m","30m"].includes(t)?{days:365,label:"1年"}:{days:1095,label:"3年"}},recommendedRange:function(){return{days:30,label:"30天",key:"30d"}},combinedAlertType:function(){return this.precisionInfo&&this.precisionInfo.enabled?"high"===this.precisionInfo.precision?"success":"info":this.precisionInfo&&!this.precisionInfo.enabled&&this.market&&"crypto"===this.market.toLowerCase()?"warning":"info"},datePresets:function(){var t=[],e=this.selectedTimeframe||this.timeframe||"1D";return"1m"===e?(t.push({key:"7d",days:7,label:"7D"}),t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"})):"5m"===e?(t.push({key:"14d",days:14,label:"14D"}),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"})):(["15m","30m"].includes(e),t.push({key:"30d",days:30,label:"30D"}),t.push({key:"90d",days:90,label:"3M"}),t.push({key:"180d",days:180,label:"6M"}),t.push({key:"365d",days:365,label:"1Y"})),t},defaultStartDate:function(){return $r()().subtract(this.recommendedRange.days,"days")},defaultEndDate:function(){return $r()()},earliestDate:function(){return $r()().subtract(this.maxBacktestRange.days,"days")},labelCol:function(){return 0===this.currentStep?{span:9}:{span:6}},wrapperCol:function(){return 0===this.currentStep?{span:15}:{span:18}}},watch:{visible:function(t){var e=this;t?(this.currentStep=0,this.hasResult=!1,this.backtestRunId=null,this.step1CollapseKeys=["risk"],this.trailingEnabledUi=!1,this.entryPctMaxUi=100,this.precisionInfo=null,this.selectedDatePreset=null,this.selectedTimeframe=this.timeframe||"1D",this.result={totalReturn:0,annualReturn:0,maxDrawdown:0,sharpeRatio:0,winRate:0,profitFactor:0,totalTrades:0,totalProfit:0,totalCommission:0,trades:[],equityCurve:[]},this.$nextTick(function(){e.form&&(e.form.resetFields(),e.trailingEnabledUi=!!e.form.getFieldValue("trailingEnabled"),e.recalcEntryPctMaxUi(),e.selectedDatePreset="30d",e.fetchPrecisionInfo())})):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},created:function(){this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:120,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100,customRender:function(t){return t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4}):"--"}},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:130,scopedSlots:{customRender:"balance"}}]},methods:{recalcEntryPctMaxUi:function(){if(this.form){var t=!!this.form.getFieldValue("trendAddEnabled"),e=!!this.form.getFieldValue("dcaAddEnabled"),i=Number(this.form.getFieldValue("trendAddMaxTimes")||0),n=Number(this.form.getFieldValue("dcaAddMaxTimes")||0),r=Number(this.form.getFieldValue("trendAddSizePct")||0),a=Number(this.form.getFieldValue("dcaAddSizePct")||0),o=(t?i*r:0)+(e?n*a:0),s=Math.max(0,Math.min(100,100-o));this.entryPctMaxUi=s}else this.entryPctMaxUi=100},normalizeEntryPct:function(){if(this.form){var t=Number(this.form.getFieldValue("entryPct")||0),e=Number(this.entryPctMaxUi||100);t>e&&this.form.setFieldsValue({entryPct:e})}},onTrendAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({dcaAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onDcaAddToggle:function(t){var e=this;this.form&&(t&&this.form.setFieldsValue({trendAddEnabled:!1}),this.$nextTick(function(){e.recalcEntryPctMaxUi(),e.normalizeEntryPct()}))},onScaleParamsChange:function(){var t=this;this.$nextTick(function(){t.recalcEntryPctMaxUi(),t.normalizeEntryPct()})},onEntryPctChange:function(){var t=this;this.$nextTick(function(){return t.normalizeEntryPct()})},onTrailingToggle:function(t){this.form&&(this.trailingEnabledUi=!!t,t||this.form.setFieldsValue({trailingStopPct:0,trailingActivationPct:0}))},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={buy:this.$t("dashboard.indicator.backtest.buy"),sell:this.$t("dashboard.indicator.backtest.sell"),liquidation:this.$t("dashboard.indicator.backtest.liquidation"),open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort")};return e[t]||t},disabledStartDate:function(t){return!!t&&(t>$r()().endOf("day")||t$r()().endOf("day"))return!0;if(tn.endOf("day"))return!0}return!1},applyDatePreset:function(t){this.selectedDatePreset=t.key;var e=$r()(),i=$r()().subtract(t.days,"days");this.form.setFieldsValue({startDate:i,endDate:e}),this.fetchPrecisionInfo(i,e)},fetchPrecisionInfo:function(t,e){var i=this;return(0,c.A)((0,l.A)().m(function n(){var r;return(0,l.A)().w(function(n){while(1)switch(n.p=n.n){case 0:if(t&&e||(t=i.form?i.form.getFieldValue("startDate"):null,e=i.form?i.form.getFieldValue("endDate"):null),t||(t=i.defaultStartDate),e||(e=i.defaultEndDate),i.market&&"crypto"===i.market.toLowerCase()){n.n=1;break}return i.precisionInfo={enabled:!1,reason:"only_crypto",message:i.$t("dashboard.indicator.backtest.onlyCryptoSupported")},n.a(2);case 1:return n.p=1,n.n=2,(0,f.Ay)({url:"/api/indicator/backtest/precision-info",method:"get",params:{market:i.market,startDate:t.format("YYYY-MM-DD"),endDate:e.format("YYYY-MM-DD")},timeout:3e4});case 2:r=n.v,1===r.code&&r.data&&(i.precisionInfo=r.data),n.n=4;break;case 3:n.p=3,n.v,i.precisionInfo=null;case 4:return n.a(2)}},n,null,[[1,3]])}))()},onTimeframeChange:function(){this.selectedDatePreset="30d";var t=$r()(),e=$r()().subtract(30,"days");this.form.setFieldsValue({startDate:e,endDate:t}),this.fetchPrecisionInfo(e,t)},onDateChange:function(){var t=this;this.selectedDatePreset=null,this.$nextTick(function(){t.fetchPrecisionInfo()})},validateDateRange:function(t,e){if(!t||!e)return!0;var i=e.diff(t,"days"),n=this.maxBacktestRange.days||365;return!(i>n)||(this.$message.error(this.$t("dashboard.indicator.backtest.dateRangeExceededDays",{timeframe:this.selectedTimeframe||this.timeframe,maxRange:this.maxBacktestRange.label,maxDays:n})),!1)},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(t.toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},handleCancel:function(){this.$emit("cancel")},handlePrev:function(){this.loading||this.currentStep>0&&(this.currentStep-=1)},handleNext:function(){this.loading||(0!==this.currentStep?1===this.currentStep&&this.handleRunBacktest():this.currentStep=1)},handleRerun:function(){this.loading||(this.currentStep=1,this.hasResult=!1,this.backtestRunId=null)},startLoadingAnimation:function(){var t=this,e=[this.$t("dashboard.indicator.backtest.loadingTip1")||"正在获取历史K线数据...",this.$t("dashboard.indicator.backtest.loadingTip2")||"正在执行策略信号计算...",this.$t("dashboard.indicator.backtest.loadingTip3")||"正在模拟交易执行...",this.$t("dashboard.indicator.backtest.loadingTip4")||"正在计算回测指标...",this.$t("dashboard.indicator.backtest.loadingTip5")||"即将完成,请稍候..."],i=0;this.loadingTip=e[0],this.loadingTimer=setInterval(function(){i=(i+1)%e.length,t.loadingTip=e[i]},2e3)},stopLoadingAnimation:function(){this.loadingTimer&&(clearInterval(this.loadingTimer),this.loadingTimer=null),this.loadingTip=""},handleRunBacktest:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i;return(0,l.A)().w(function(e){while(1)switch(e.n){case 0:i=["startDate","endDate","initialCapital","commission","leverage","tradeDirection","slippage"],t.form.validateFields(i,function(){var e=(0,c.A)((0,l.A)().m(function e(i,n){var r,a,o,s,c,u,h,p,v;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!i){e.n=1;break}return e.a(2);case 1:if(r=(0,d.A)((0,d.A)({},t.form.getFieldsValue()||{}),n||{}),a=Date.now(),t.indicator&&t.indicator.id){e.n=2;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noIndicatorCode")),e.a(2);case 2:if(t.symbol){e.n=3;break}return t.$message.error(t.$t("dashboard.indicator.backtest.noSymbol")),e.a(2);case 3:if(t.validateDateRange(n.startDate,n.endDate)){e.n=4;break}return e.a(2);case 4:return t.loading=!0,t.hasResult=!1,t.startLoadingAnimation(),e.p=5,o=function(t){return Number(t||0)/100},s={risk:{stopLossPct:o(r.stopLossPct),takeProfitPct:o(r.takeProfitPct),trailing:{enabled:!!r.trailingEnabled,pct:o(r.trailingStopPct),activationPct:o(r.trailingActivationPct)}},position:{entryPct:o(r.entryPct||0)},scale:{trendAdd:{enabled:!!r.trendAddEnabled,stepPct:o(r.trendAddStepPct),sizePct:o(r.trendAddSizePct),maxTimes:r.trendAddMaxTimes||0},dcaAdd:{enabled:!!r.dcaAddEnabled,stepPct:o(r.dcaAddStepPct),sizePct:o(r.dcaAddSizePct),maxTimes:r.dcaAddMaxTimes||0},trendReduce:{enabled:!!r.trendReduceEnabled,stepPct:o(r.trendReduceStepPct),sizePct:o(r.trendReduceSizePct),maxTimes:r.trendReduceMaxTimes||0},adverseReduce:{enabled:!!r.adverseReduceEnabled,stepPct:o(r.adverseReduceStepPct),sizePct:o(r.adverseReduceSizePct),maxTimes:r.adverseReduceMaxTimes||0}}},c={userid:t.userId||1,indicatorId:t.indicator.id,symbol:t.symbol,market:t.market,timeframe:t.selectedTimeframe||t.timeframe,startDate:n.startDate.format("YYYY-MM-DD"),endDate:n.endDate.format("YYYY-MM-DD"),initialCapital:n.initialCapital,commission:o(n.commission||0),slippage:o(n.slippage||0),leverage:n.leverage||1,tradeDirection:n.tradeDirection||"long",strategyConfig:s,enableMtf:t.market&&"crypto"===t.market.toLowerCase()},e.n=6,(0,f.Ay)({url:"/api/indicator/backtest",method:"post",data:c,timeout:6e5});case 6:u=e.v,((Date.now()-a)/1e3).toFixed(1),1===u.code&&u.data?(u.data.runId&&(t.backtestRunId=u.data.runId),t.result=u.data.result||u.data,t.hasResult=!0,t.currentStep=2,t.$nextTick(function(){t.renderEquityChart()}),t.$message.success(t.$t("dashboard.indicator.backtest.success"))):t.$message.error(u.msg||t.$t("dashboard.indicator.backtest.failed")),e.n=8;break;case 7:e.p=7,v=e.v,h=t.$t("dashboard.indicator.backtest.failed"),"ECONNABORTED"===v.code||v.message&&v.message.includes("timeout")?h="回测超时,请减少回测时间范围或使用更大的时间周期":v.response?h=(null===(p=v.response.data)||void 0===p?void 0:p.msg)||v.response.statusText||h:v.message&&(h=v.message),t.$message.error(h);case 8:return e.p=8,t.stopLoadingAnimation(),t.loading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[5,7,8,9]])}));return function(t,i){return e.apply(this,arguments)}}());case 1:return e.a(2)}},e)}))()},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#e8e8e8",borderWidth:1,textStyle:{color:"#333"},formatter:function(t){var e='

'.concat(t[0].axisValue,"
");return t.forEach(function(t){if(void 0!==t.value&&null!==t.value){var i=t.value.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2});e+='
\n '.concat(t.marker," ").concat(t.seriesName,'\n $').concat(i,"\n
")}}),e}},legend:{show:!1},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1,axisLine:{lineStyle:{color:"#e8e8e8"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,rotate:0,interval:Math.floor(i.length/6)}},yAxis:{type:"value",splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11,formatter:function(t){return t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(0)+"K":t}}},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s,cap:"round",join:"round"},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)},emphasis:{lineStyle:{width:3}}}],animation:!0,animationDuration:800,animationEasing:"cubicOut"};this.equityChart.setOption(c),window.addEventListener("resize",function(){t.equityChart&&t.equityChart.resize()})}}},beforeDestroy:function(){this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},Yr=Kr,Xr=(0,T.A)(Yr,zr,Wr,!1,null,"473e449c",null),Ur=Xr.exports,Gr=function(){var t=this,e=t._self._c;return e("a-drawer",{attrs:{title:t.$t("dashboard.indicator.backtest.historyTitle"),visible:t.visible,width:t.isMobile?"100%":980,maskClosable:!0},on:{close:function(e){return t.$emit("cancel")}}},[e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-switch",{model:{value:t.useCurrentFilters,callback:function(e){t.useCurrentFilters=e},expression:"useCurrentFilters"}}),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyUseCurrent"))+" ")]),e("a-button",{attrs:{type:"primary",loading:t.loading},on:{click:t.loadRuns}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyRefresh"))+" ")]),e("a-button",{attrs:{type:"primary",disabled:0===t.selectedRowKeys.length,loading:t.analyzing},on:{click:t.handleAIAnalyze}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyAIAnalyze"))+" ")])],1),t.useCurrentFilters?t._e():e("div",{staticStyle:{display:"flex",gap:"12px","margin-bottom":"12px","align-items":"center","flex-wrap":"wrap"}},[e("a-input",{staticStyle:{width:"220px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterSymbol")},model:{value:t.filterSymbol,callback:function(e){t.filterSymbol=e},expression:"filterSymbol"}}),e("a-select",{staticStyle:{width:"140px"},attrs:{placeholder:t.$t("dashboard.indicator.backtest.historyFilterTimeframe"),allowClear:""},model:{value:t.filterTimeframe,callback:function(e){t.filterTimeframe=e},expression:"filterTimeframe"}},t._l(t.timeframes,function(i){return e("a-select-option",{key:i,attrs:{value:i}},[t._v(t._s(i))])}),1),e("a-button",{attrs:{loading:t.loading},on:{click:t.loadRuns}},[t._v(t._s(t.$t("dashboard.indicator.backtest.historyApply")))]),e("span",{staticStyle:{color:"#8c8c8c"}},[t._v(t._s(t.filterLabel))])],1),e("a-table",{attrs:{columns:t.columns,"data-source":t.runs,loading:t.loading,size:"small",pagination:{pageSize:10,size:"small"},rowKey:"id",scroll:{x:900},rowSelection:{selectedRowKeys:t.selectedRowKeys,onChange:t.onRowSelectionChange}},scopedSlots:t._u([{key:"range",fn:function(i,n){return[e("span",[t._v(t._s(n.start_date||"")+" ~ "+t._s(n.end_date||""))])]}},{key:"status",fn:function(i){return[e("a-tag",{attrs:{color:"success"===i?"green":"failed"===i?"red":"blue"}},[t._v(" "+t._s("success"===i?t.$t("dashboard.indicator.backtest.historyStatusSuccess"):"failed"===i?t.$t("dashboard.indicator.backtest.historyStatusFailed"):i)+" ")])]}},{key:"actions",fn:function(i,n){return[e("a-button",{attrs:{type:"link",size:"small",loading:t.detailLoadingId===n.id},on:{click:function(e){return t.viewRun(n)}}},[t._v(" "+t._s(t.$t("dashboard.indicator.backtest.historyView"))+" ")])]}}])}),t.loading||0!==t.runs.length?t._e():e("a-empty",{attrs:{description:t.$t("dashboard.indicator.backtest.historyNoData")}}),e("a-modal",{attrs:{title:t.$t("dashboard.indicator.backtest.historyAIAnalyzeTitle"),visible:t.showAIResult,footer:null,width:t.isMobile?"100%":900},on:{cancel:function(e){t.showAIResult=!1}}},[t.analyzing?e("div",{staticStyle:{padding:"12px 0"}},[e("a-spin")],1):e("div",{staticStyle:{"white-space":"pre-wrap","font-family":"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace"}},[t._v(" "+t._s(t.aiResult||t.$t("dashboard.indicator.backtest.historyNoAIResult"))+" ")])])],1)},jr=[],qr={name:"BacktestHistoryDrawer",props:{visible:{type:Boolean,default:!1},userId:{type:[Number,String],default:1},indicatorId:{type:[Number,String],default:null},symbol:{type:String,default:""},market:{type:String,default:""},timeframe:{type:String,default:""},isMobile:{type:Boolean,default:!1}},data:function(){return{loading:!1,detailLoadingId:null,analyzing:!1,showAIResult:!1,aiResult:"",useCurrentFilters:!0,filterSymbol:"",filterTimeframe:"",timeframes:["1m","5m","15m","30m","1H","4H","1D","1W"],runs:[],columns:[],selectedRowKeys:[]}},computed:{filterLabel:function(){var t=[];this.indicatorId&&t.push("indicatorId=".concat(this.indicatorId));var e=this.useCurrentFilters?this.market:this.market||"",i=this.useCurrentFilters?this.symbol:this.filterSymbol||"",n=this.useCurrentFilters?this.timeframe:this.filterTimeframe||"";return e&&t.push("market=".concat(e)),i&&t.push("symbol=".concat(i)),n&&t.push("timeframe=".concat(n)),t.length?t.join(" | "):""}},watch:{visible:function(t){t&&(this.initColumns(),this.useCurrentFilters=!0,this.filterSymbol=this.symbol||"",this.filterTimeframe=this.timeframe||"",this.selectedRowKeys=[],this.aiResult="",this.showAIResult=!1,this.loadRuns())}},methods:{onRowSelectionChange:function(t){this.selectedRowKeys=t||[]},initColumns:function(){this.columns.length||(this.columns=[{title:this.$t("dashboard.indicator.backtest.historyRunId"),dataIndex:"id",key:"id",width:90},{title:this.$t("dashboard.indicator.backtest.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:140},{title:this.$t("dashboard.indicator.backtest.tradeDirection"),dataIndex:"trade_direction",key:"trade_direction",width:90},{title:this.$t("dashboard.indicator.backtest.leverage"),dataIndex:"leverage",key:"leverage",width:90},{title:this.$t("dashboard.indicator.backtest.historyRange"),key:"range",width:220,scopedSlots:{customRender:"range"}},{title:this.$t("dashboard.indicator.backtest.historyStatus"),dataIndex:"status",key:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("dashboard.indicator.backtest.historyActions"),key:"actions",width:90,scopedSlots:{customRender:"actions"}}])},loadRuns:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n,r,a;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId){e.n=1;break}return e.a(2);case 1:return t.loading=!0,e.p=2,i=t.useCurrentFilters?t.symbol:t.filterSymbol||"",n=t.useCurrentFilters?t.timeframe:t.filterTimeframe||"",r=t.market||"",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/history",method:"get",params:{userid:t.userId,limit:100,offset:0,indicatorId:t.indicatorId,symbol:i,market:r,timeframe:n}});case 3:a=e.v,a&&1===a.code&&Array.isArray(a.data)?t.runs=a.data:t.runs=[];case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()},viewRun:function(t){var e=this;return(0,c.A)((0,l.A)().m(function i(){var n;return(0,l.A)().w(function(i){while(1)switch(i.p=i.n){case 0:if(t&&t.id){i.n=1;break}return i.a(2);case 1:return e.detailLoadingId=t.id,i.p=2,i.n=3,(0,f.Ay)({url:"/api/indicator/backtest/get",method:"get",params:{userid:e.userId,runId:t.id}});case 3:n=i.v,n&&1===n.code&&n.data&&e.$emit("view",n.data);case 4:return i.p=4,e.detailLoadingId=null,i.f(4);case 5:return i.a(2)}},i,null,[[2,,4,5]])}))()},handleAIAnalyze:function(){var t=this;return(0,c.A)((0,l.A)().m(function e(){var i,n;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(t.userId&&t.selectedRowKeys.length){e.n=1;break}return e.a(2);case 1:return t.analyzing=!0,t.showAIResult=!0,t.aiResult="",e.p=2,i=t.$i18n&&t.$i18n.locale?t.$i18n.locale:"zh-CN",e.n=3,(0,f.Ay)({url:"/api/indicator/backtest/aiAnalyze",method:"post",data:{userid:t.userId,runIds:t.selectedRowKeys,lang:i}});case 3:n=e.v,n&&1===n.code&&n.data&&n.data.analysis?t.aiResult=n.data.analysis:t.aiResult=n.msg||t.$t("dashboard.indicator.backtest.historyNoAIResult");case 4:return e.p=4,t.analyzing=!1,e.f(4);case 5:return e.a(2)}},e,null,[[2,,4,5]])}))()}}},Zr=qr,Jr=(0,T.A)(Zr,Gr,jr,!1,null,null,null),Qr=Jr.exports,ta=function(){var t,e,i,n=this,r=n._self._c;return r("a-modal",{staticClass:"backtest-run-viewer",attrs:{title:n.modalTitle,visible:n.visible,width:1100,maskClosable:!1},on:{cancel:function(t){return n.$emit("cancel")}}},[n.run&&n.run.result?r("div",[n.run.id?r("a-alert",{staticStyle:{"margin-bottom":"12px"},attrs:{type:"info","show-icon":"",message:n.$t("dashboard.indicator.backtest.savedRunId",{id:n.run.id})}}):n._e(),r("div",{staticClass:"metrics-cards"},[r("div",{staticClass:"metric-card",class:{positive:n.result.totalReturn>0,negative:n.result.totalReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.totalReturn)))]),r("div",{staticClass:"metric-amount"},[n._v(n._s(n.formatMoney(n.result.totalProfit)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.annualReturn>0,negative:n.result.annualReturn<0}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.annualReturn")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.annualReturn)))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.maxDrawdown")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.maxDrawdown)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.sharpeRatio")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(t=n.result.sharpeRatio)&&void 0!==t?t:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.winRate")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(n.formatPercent(n.result.winRate)))])]),r("div",{staticClass:"metric-card",class:{positive:n.result.profitFactor>=1.5,negative:n.result.profitFactor<1}},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.profitFactor")))]),r("div",{staticClass:"metric-value"},[n._v(n._s((null!==(e=n.result.profitFactor)&&void 0!==e?e:0).toFixed(2)))])]),r("div",{staticClass:"metric-card"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalTrades")))]),r("div",{staticClass:"metric-value"},[n._v(n._s(null!==(i=n.result.totalTrades)&&void 0!==i?i:0))])]),r("div",{staticClass:"metric-card negative"},[r("div",{staticClass:"metric-label"},[n._v(n._s(n.$t("dashboard.indicator.backtest.totalCommission")))]),r("div",{staticClass:"metric-value"},[n._v("-$"+n._s(n.result.totalCommission?n.result.totalCommission.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"0.00"))])])]),r("div",{staticClass:"chart-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.equityCurve")))]),r("div",{ref:"equityChartRef",staticClass:"equity-chart"})]),r("div",{staticClass:"trades-section"},[r("div",{staticClass:"chart-title"},[n._v(n._s(n.$t("dashboard.indicator.backtest.tradeHistory")))]),r("a-table",{attrs:{columns:n.tradeColumns,"data-source":n.result.trades||[],pagination:{pageSize:10,size:"small"},size:"small",scroll:{x:800},rowKey:n.rowKey},scopedSlots:n._u([{key:"type",fn:function(t){return[r("a-tag",{attrs:{color:n.getTradeTypeColor(t)}},[n._v(" "+n._s(n.getTradeTypeText(t))+" ")])]}},{key:"balance",fn:function(t){return[r("span",{staticStyle:{color:"#1890ff","font-weight":"500"}},[n._v(" $"+n._s(t?t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):"--")+" ")])]}},{key:"profit",fn:function(t){return[r("span",{style:{color:t>0?"#52c41a":t<0?"#f5222d":"#666"}},[n._v(" "+n._s(n.formatMoney(t))+" ")])]}}])})],1)],1):r("div",{staticStyle:{padding:"12px 0"}},[r("a-empty",{attrs:{description:n.$t("dashboard.indicator.backtest.historyNoData")}})],1),r("template",{slot:"footer"},[r("a-button",{on:{click:function(t){return n.$emit("cancel")}}},[n._v(n._s(n.$t("dashboard.indicator.backtest.close")))])],1)],2)},ea=[],ia={name:"BacktestRunViewer",props:{visible:{type:Boolean,default:!1},run:{type:Object,default:null}},data:function(){return{equityChart:null,tradeColumns:[]}},computed:{result:function(){return this.run&&this.run.result?this.run.result:{}},modalTitle:function(){var t=this.run&&this.run.id?"#".concat(this.run.id):"";return"".concat(this.$t("dashboard.indicator.backtest.historyTitle")," ").concat(t).trim()}},watch:{visible:function(t){var e=this;t?this.$nextTick(function(){e.initColumns(),e.renderEquityChart()}):this.equityChart&&(this.equityChart.dispose(),this.equityChart=null)}},methods:{rowKey:function(t,e){return e},initColumns:function(){this.tradeColumns.length||(this.tradeColumns=[{title:this.$t("dashboard.indicator.backtest.tradeTime"),dataIndex:"time",key:"time",width:160},{title:this.$t("dashboard.indicator.backtest.tradeType"),dataIndex:"type",key:"type",width:150,scopedSlots:{customRender:"type"}},{title:this.$t("dashboard.indicator.backtest.price"),dataIndex:"price",key:"price",width:110},{title:this.$t("dashboard.indicator.backtest.amount"),dataIndex:"amount",key:"amount",width:100},{title:this.$t("dashboard.indicator.backtest.profit"),dataIndex:"profit",key:"profit",width:110,scopedSlots:{customRender:"profit"}},{title:this.$t("dashboard.indicator.backtest.balance"),dataIndex:"balance",key:"balance",width:120,scopedSlots:{customRender:"balance"}}])},getTradeTypeColor:function(t){var e={buy:"green",sell:"red",liquidation:"orange",open_long:"green",add_long:"cyan",close_long:"orange",close_long_stop:"red",close_long_profit:"lime",close_long_trailing:"gold",reduce_long:"volcano",open_short:"red",add_short:"magenta",close_short:"blue",close_short_stop:"red",close_short_profit:"cyan",close_short_trailing:"gold",reduce_short:"volcano"};return e[t]||"default"},getTradeTypeText:function(t){var e={open_long:this.$t("dashboard.indicator.backtest.openLong"),add_long:this.$t("dashboard.indicator.backtest.addLong"),close_long:this.$t("dashboard.indicator.backtest.closeLong"),close_long_stop:this.$t("dashboard.indicator.backtest.closeLongStop"),close_long_profit:this.$t("dashboard.indicator.backtest.closeLongProfit"),close_long_trailing:this.$t("dashboard.indicator.backtest.closeLongTrailing"),reduce_long:this.$t("dashboard.indicator.backtest.reduceLong"),open_short:this.$t("dashboard.indicator.backtest.openShort"),add_short:this.$t("dashboard.indicator.backtest.addShort"),close_short:this.$t("dashboard.indicator.backtest.closeShort"),close_short_stop:this.$t("dashboard.indicator.backtest.closeShortStop"),close_short_profit:this.$t("dashboard.indicator.backtest.closeShortProfit"),close_short_trailing:this.$t("dashboard.indicator.backtest.closeShortTrailing"),reduce_short:this.$t("dashboard.indicator.backtest.reduceShort"),liquidation:this.$t("dashboard.indicator.backtest.liquidation")};return e[t]||t},formatPercent:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"";return"".concat(e).concat(Number(t).toFixed(2),"%")},formatMoney:function(t){if(null===t||void 0===t)return"--";var e=t>=0?"+":"-";return"".concat(e,"$").concat(Math.abs(t).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}))},renderEquityChart:function(){var t=this;if(this.$refs.equityChartRef){this.equityChart&&this.equityChart.dispose(),this.equityChart=Hr.Ts(this.$refs.equityChartRef);var e=this.result.equityCurve||[],i=e.map(function(t){return t.time||t.date}),n=e.map(function(t){return void 0!==t.value?t.value:t.equity}),r=n[0]||1e5,a=n[n.length-1]||r,o=a>=r,s=o?"#52c41a":"#f5222d",l=o?[{offset:0,color:"rgba(82, 196, 26, 0.35)"},{offset:1,color:"rgba(82, 196, 26, 0.02)"}]:[{offset:0,color:"rgba(245, 34, 45, 0.35)"},{offset:1,color:"rgba(245, 34, 45, 0.02)"}],c={tooltip:{trigger:"axis"},grid:{left:"3%",right:"4%",bottom:"12%",top:"8%",containLabel:!0},xAxis:{type:"category",data:i,boundaryGap:!1},yAxis:{type:"value"},series:[{name:this.$t("dashboard.indicator.backtest.strategy"),type:"line",data:n,smooth:.4,symbol:"none",sampling:"lttb",lineStyle:{width:2.5,color:s},areaStyle:{color:new Hr.fA.W4(0,0,0,1,l)}}]};this.equityChart.setOption(c),window.addEventListener("resize",function(){return t.equityChart&&t.equityChart.resize()})}}}},na=ia,ra=(0,T.A)(na,ta,ea,!1,null,"a484239a",null),aa=ra.exports,oa=i(83973),sa={name:"DashboardIndicator",components:{IndicatorEditor:I,KlineChart:Or,BacktestModal:Ur,BacktestHistoryDrawer:Qr,BacktestRunViewer:aa,QuickTradePanel:oa.A},computed:(0,d.A)((0,d.A)({},(0,p.aH)({navTheme:function(t){return t.app.theme}})),{},{chartTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme?"dark":"light"},isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),setup:function(){var t=(0,h.nI)(),e=t||{},i=e.proxy,n=(0,h.KR)(1),r=(0,h.KR)(!1),p=(0,h.KR)(void 0),m=(0,h.KR)([]),y=(0,h.KR)([]),b=(0,h.KR)(!1),x=(0,h.KR)(""),_=(0,h.KR)(!1),w=(0,h.KR)(!1),C=(0,h.KR)(!1),S=(0,h.KR)(""),k=(0,h.KR)(""),A=(0,h.KR)([]),T=(0,h.KR)(!1),M=(0,h.KR)([]),I=(0,h.KR)(!1),E=(0,h.KR)(null),D=(0,h.KR)(null),P=(0,h.KR)([]),L=(0,h.KR)(!1),R=(0,h.KR)(!1),F=(0,h.KR)(""),B=(0,h.KR)(""),N=(0,h.KR)(0),O=(0,h.EW)(function(){return"crypto"===(K.value||"").toLowerCase()}),z=function(){O.value?(F.value=H.value||"",N.value=parseFloat(Y.value)||0,B.value="",R.value=!0):u.A.warning(i.$t("quickTrade.cryptoOnly"))},W=function(){u.A.success(i.$t("quickTrade.orderSuccess"))},V=function(t){t&&O.value&&(F.value=t)},$=function(){i&&i.$router&&i.$router.push("/indicator-community")},H=(0,h.KR)(""),K=(0,h.KR)(""),Y=(0,h.KR)("--"),X=(0,h.KR)(0),U=(0,h.EW)(function(){return X.value>0?"color-up":X.value<0?"color-down":""}),G=(0,h.KR)("1D"),j=(0,h.KR)([]),q=(0,h.KR)(!1),Z=[{id:"sma5",name:"SMA5 (5日均线)",shortName:"SMA5",type:"line",defaultParams:{length:5}},{id:"sma10",name:"SMA10 (10日均线)",shortName:"SMA10",type:"line",defaultParams:{length:10}},{id:"sma20",name:"SMA20 (20日均线)",shortName:"SMA20",type:"line",defaultParams:{length:20}},{id:"sma30",name:"SMA30 (30日均线)",shortName:"SMA30",type:"line",defaultParams:{length:30}}],J=[{id:"ema5",name:"EMA5 (5日指数均线)",shortName:"EMA5",type:"line",defaultParams:{length:5}},{id:"ema10",name:"EMA10 (10日指数均线)",shortName:"EMA10",type:"line",defaultParams:{length:10}},{id:"ema20",name:"EMA20 (20日指数均线)",shortName:"EMA20",type:"line",defaultParams:{length:20}},{id:"ema30",name:"EMA30 (30日指数均线)",shortName:"EMA30",type:"line",defaultParams:{length:30}}],Q=(0,h.KR)([]),tt=(0,h.KR)([]),et=(0,h.KR)(!1),it=(0,h.KR)(!1),nt=(0,h.KR)(null),rt=(0,h.KR)(""),at=(0,h.KR)([]),ot=(0,h.KR)({}),st=(0,h.KR)(!1),lt=(0,h.KR)({}),ct=(0,h.KR)(!1),ut=(0,h.KR)(!1),dt=(0,h.KR)(!1),ht=(0,h.KR)(null),pt=(0,h.KR)(!1),ft=(0,h.KR)(null),vt=(0,h.KR)(!1),gt=(0,h.KR)(null),mt=(0,h.KR)(!1),yt=(0,h.KR)(null),bt=(0,h.KR)(!1),xt=(0,h.KR)(null),_t=(0,h.KR)(!1),wt=(0,h.KR)(!1),Ct=(0,h.KR)("free"),St=(0,h.KR)(10),kt=(0,h.KR)(""),At=(0,h.KR)(!1),Tt={price:[{required:!0,message:"请输入价格",trigger:"blur",type:"number"}]},Mt=(0,h.KR)(!1),It=function(t){var e=t.price,i=t.change;Y.value=e,X.value=i},Et=function(){},Dt=(0,h.KR)([]),Pt=(0,h.KR)([]),Lt=function(t){G.value=t},Rt=function(t){return t?Object.values(t).join(", "):""},Ft=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r.value=!0,t.p=1,a=(0,h.nI)(),o=null===a||void 0===a||null===(e=a.proxy)||void 0===e?void 0:e.$store,s=(null===o||void 0===o||null===(i=o.getters)||void 0===i?void 0:i.userInfo)||{},!s||!s.email){t.n=2;break}return n.value=s.id,r.value=!1,Bt(),re(),t.a(2);case 2:return t.n=3,(0,g.ug)();case 3:c=t.v,c&&1===c.code&&c.data&&(n.value=c.data.id,o&&o.commit("SET_INFO",c.data),Bt(),re()),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,r.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[1,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Bt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return b.value=!0,t.p=2,t.n=3,(0,v.Qo)({userid:n.value});case 3:e=t.v,e&&1===e.code&&e.data&&(y.value=e.data.map(function(t){return(0,d.A)((0,d.A)({},t),{},{label:t.symbol+(t.name?" (".concat(t.name,")"):""),value:"".concat(t.market,":").concat(t.symbol)})}),Nt(),y.value.length>0&&!H.value&&(r=y.value[0],K.value=r.market,H.value=r.symbol,p.value=r.value)),t.n=5;break;case 4:t.p=4,t.v,u.A.error(i.$t("dashboard.indicator.error.loadWatchlistFailed"));case 5:return t.p=5,b.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),Nt=function(){x.value?m.value=y.value.filter(function(t){return t.symbol.toLowerCase().includes(x.value.toLowerCase())||t.name&&t.name.toLowerCase().includes(x.value.toLowerCase())}):m.value=y.value},Ot=function(t){x.value=t,0===y.value.length&&t&&(_.value=!0),Nt()},zt=function(t){_.value=t,t||(x.value="")},Wt=function(t){if("__empty_watchlist_hint__"!==t){if("__add_stock_option__"===t)return w.value=!0,void setTimeout(function(){p.value=void 0},0);var e=y.value.find(function(e){return e.value===t});if(e||(e=m.value.find(function(e){return e.value===t})),!e&&t.includes(":")){var i=t.split(":"),n=(0,s.A)(i,2),r=n[0],a=n[1];e={market:r,symbol:a,value:t}}e&&(K.value=e.market,H.value=e.symbol,p.value=e.value)}},Vt=function(t,e){var i,n=(null===(i=e.componentOptions)||void 0===i||null===(i=i.propsData)||void 0===i?void 0:i.value)||"";return"__empty_watchlist_hint__"===n||"__add_stock_option__"===n||n.toLowerCase().includes(t.toLowerCase())},$t=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:return t.p=0,t.n=1,(0,v.iO)();case 1:e=t.v,e&&1===e.code&&e.data&&Array.isArray(e.data)?P.value=e.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):e&&1===e.code&&e.data&&"object"===(0,o.A)(e.data)?P.value=Object.keys(e.data).map(function(t){return{value:t,i18nKey:"dashboard.analysis.market.".concat(t)}}):P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],P.value.length>0&&!S.value&&(S.value=P.value[0].value),t.n=3;break;case 2:t.p=2,t.v,P.value=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:return t.a(2)}},t,null,[[0,2]])}));return function(){return t.apply(this,arguments)}}(),Ht=function(){w.value=!1,E.value=null,k.value="",A.value=[],L.value=!1,S.value=P.value.length>0?P.value[0].value:""},Kt=function(t){S.value=t,k.value="",A.value=[],E.value=null,L.value=!1,qt(t)},Yt=function(t){var e=t.target.value;if(k.value=e,D.value&&clearTimeout(D.value),!e||""===e.trim())return A.value=[],L.value=!1,void(E.value=null);D.value=setTimeout(function(){Ut(e)},500)},Xt=function(t){t&&t.trim()&&(S.value?A.value.length>0||(L.value&&0===A.value.length?Gt():Ut(t)):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},Ut=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var n;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e&&""!==e.trim()){t.n=1;break}return A.value=[],L.value=!1,t.a(2);case 1:if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:return T.value=!0,L.value=!0,t.p=3,t.n=4,(0,v._3)({market:S.value,keyword:e.trim(),limit:20});case 4:n=t.v,n&&1===n.code&&n.data&&n.data.length>0?A.value=n.data:(A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""}),t.n=6;break;case 5:t.p=5,t.v,A.value=[],E.value={market:S.value,symbol:e.trim().toUpperCase(),name:""};case 6:return t.p=6,T.value=!1,t.f(6);case 7:return t.a(2)}},t,null,[[3,5,6,7]])}));return function(e){return t.apply(this,arguments)}}(),Gt=function(){k.value&&k.value.trim()?S.value?E.value={market:S.value,symbol:k.value.trim().toUpperCase(),name:""}:u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},jt=function(t){E.value={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},qt=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var i;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e||(e=S.value||(P.value.length>0?P.value[0].value:"")),e){t.n=1;break}return t.a(2);case 1:return I.value=!0,t.p=2,t.n=3,(0,v.z6)({market:e,limit:10});case 3:i=t.v,i&&1===i.code&&i.data?M.value=i.data:M.value=[],t.n=5;break;case 4:t.p=4,t.v,M.value=[];case 5:return t.p=5,I.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(e){return t.apply(this,arguments)}}(),Zt=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(e="",r="",!E.value){t.n=1;break}e=E.value.market,r=E.value.symbol.toUpperCase(),t.n=4;break;case 1:if(!k.value||!k.value.trim()){t.n=3;break}if(S.value){t.n=2;break}return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),t.a(2);case 2:e=S.value,r=k.value.trim().toUpperCase(),t.n=4;break;case 3:return u.A.warning(i.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),t.a(2);case 4:return C.value=!0,t.p=5,t.n=6,(0,v.dp)({userid:n.value,market:e,symbol:r});case 6:if(a=t.v,!a||1!==a.code){t.n=8;break}return u.A.success(i.$t("dashboard.analysis.message.addStockSuccess")),Ht(),t.n=7,Bt();case 7:t.n=9;break;case 8:u.A.error((null===a||void 0===a?void 0:a.msg)||i.$t("dashboard.analysis.message.addStockFailed"));case 9:t.n=11;break;case 10:t.p=10,c=t.v,s=(null===c||void 0===c||null===(o=c.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===c||void 0===c?void 0:c.message)||i.$t("dashboard.analysis.message.addStockFailed"),u.A.error(s);case 11:return t.p=11,C.value=!1,t.f(11);case 12:return t.a(2)}},t,null,[[5,10,11,12]])}));return function(){return t.apply(this,arguments)}}(),Jt=function(t){if(!ie(t.id)){var e=t.params||t.defaultParams||{};j.value.push((0,d.A)((0,d.A)({},t),{},{id:t.id,params:(0,d.A)({},e)}))}},Qt=function(t){j.value=j.value.filter(function(e){return e.id!==t})},te=function(t){var e=t.action,i=t.indicator;if("add"===e){var n=(0,d.A)((0,d.A)({},i),{},{calculate:ee(i.id)});Jt(n)}else"remove"===e&&Qt(i.id)},ee=function(t){return null},ie=function(t){return"sma"===t?Z.some(function(t){return j.value.some(function(e){return e.id===t.id})}):"ema"===t?J.some(function(t){return j.value.some(function(e){return e.id===t.id})}):j.value.some(function(e){return e.id===t})},ne=function(){var t=new Set;return Z.forEach(function(e){return t.add(e.id)}),J.forEach(function(e){return t.add(e.id)}),j.value.filter(function(e){return!t.has(e.id)})},re=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,i,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return t.a(2);case 1:return et.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/getIndicators",method:"get",params:{userid:n.value}});case 3:e=t.v,1===e.code&&e.data&&(i=e.data.filter(function(t){return!t.is_buy||0===t.is_buy||"0"===t.is_buy}),r=e.data.filter(function(t){return 1===t.is_buy||"1"===t.is_buy}),Q.value=i.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"custom"})}),tt.value=r.map(function(t){return(0,d.A)((0,d.A)({},t),{},{type:"python",source:"purchased"})})),t.n=5;break;case 4:t.p=4,t.v;case 5:return t.p=5,et.value=!1,t.f(5);case 6:return t.a(2)}},t,null,[[2,4,5,6]])}));return function(){return t.apply(this,arguments)}}(),ae=(0,h.KR)(null),oe=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c,h,p,f,v;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}return Qt(r),t.a(2);case 1:if(t.p=1,a=e.code||"",ae.value){t.n=2;break}return u.A.error(i.$t("dashboard.indicator.error.chartNotReady")),t.a(2);case 2:if("function"===typeof ae.value.parsePythonStrategy){t.n=3;break}return u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady")),t.a(2);case 3:if("function"===typeof ae.value.executePythonStrategy){t.n=4;break}return u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady")),t.a(2);case 4:if(o=ae.value.parsePythonStrategy(a),o){t.n=5;break}return u.A.error(i.$t("dashboard.indicator.error.parseFailed")),t.a(2);case 5:s=e.userParams||{},c=a,h=(0,d.A)({},s),p={id:r,name:e.name,type:"python",code:c,description:e.description,parsed:o,userParams:h,originalId:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0,calculate:function(t,i){return ae.value.executePythonStrategy(c,t,(0,d.A)((0,d.A)({},i),h),{id:e.id,user_id:e.user_id||e.userId,is_encrypted:e.is_encrypted||e.isEncrypted||0})}},f=(0,d.A)((0,d.A)({},o.params),s),j.value.push((0,d.A)((0,d.A)({},p),{},{params:f})),t.n=7;break;case 6:t.p=6,v=t.v,u.A.error(i.$t("dashboard.indicator.error.addIndicatorFailed")+": "+(v.message||"未知错误"));case 7:return t.a(2)}},t,null,[[1,6]])}));return function(e,i){return t.apply(this,arguments)}}(),se=function(){var t=(0,c.A)((0,l.A)().m(function t(e,n){var r,a,o,s,c;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(r="".concat(n,"-").concat(e.id),!ie(r)){t.n=1;break}Qt(r),t.n=5;break;case 1:return t.p=1,st.value=!0,t.n=2,i.$http.get("/api/indicator/getIndicatorParams",{params:{indicator_id:e.id}});case 2:a=t.v,a&&1===a.code&&Array.isArray(a.data)&&a.data.length>0?(at.value=a.data,o="".concat(n,"-").concat(e.id),s=lt.value[o],c={},a.data.forEach(function(t){var e=s&&void 0!==s[t.name]?s[t.name]:t.default;e="int"===t.type?parseInt(e)||0:"float"===t.type?parseFloat(e)||0:"bool"===t.type?!0===e||"true"===e||1===e||"1"===e:e||"",c[t.name]=e}),ot.value=c,nt.value=e,rt.value=n,it.value=!0):oe(e,n),t.n=4;break;case 3:t.p=3,t.v,oe(e,n);case 4:return t.p=4,st.value=!1,t.f(4);case 5:return t.a(2)}},t,null,[[1,3,4,5]])}));return function(e,i){return t.apply(this,arguments)}}(),le=function(){if(nt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=(0,d.A)({},ot.value);var e=(0,d.A)((0,d.A)({},nt.value),{},{userParams:(0,d.A)({},ot.value)});oe(e,rt.value)}it.value=!1,nt.value=null,rt.value=""},ce=function(){ue(),it.value=!1,setTimeout(function(){nt.value=null,rt.value=""},100)},ue=function(){if(nt.value&&rt.value){var t="".concat(rt.value,"-").concat(nt.value.id);lt.value[t]=JSON.parse(JSON.stringify(ot.value))}},de=function(){ue()},he=function(t){var e=t.code,n=t.name;if(e&&e.trim())try{if(!ae.value)return void u.A.error(i.$t("dashboard.indicator.error.chartNotReady"));if("function"!==typeof ae.value.parsePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartMethodNotReady"));if("function"!==typeof ae.value.executePythonStrategy)return void u.A.error(i.$t("dashboard.indicator.error.chartExecuteNotReady"));var r=ae.value.parsePythonStrategy(e);if(!r)return void u.A.error(i.$t("dashboard.indicator.error.parseFailedCheck"));var a={id:"temp-editor-indicator",name:n||"临时指标",type:"python",code:e,description:"",parsed:r,calculate:function(t,i){var n=e;return ae.value.executePythonStrategy(n,t,i)}},o=j.value.findIndex(function(t){return"temp-editor-indicator"===t.id});o>=0&&j.value.splice(o,1),j.value.push((0,d.A)((0,d.A)({},a),{},{params:(0,d.A)({},r.params)})),u.A.success(i.$t("dashboard.indicator.success.runIndicator"))}catch(s){u.A.error(i.$t("dashboard.indicator.error.runIndicatorFailed")+": "+(s.message||"未知错误"))}else u.A.warning(i.$t("dashboard.indicator.warning.enterCode"))},pe=function(){ht.value=null,dt.value=!0},fe=function(t){ht.value=t,dt.value=!0},ve=function(){ct.value=!ct.value},ge=function(t){a.A.confirm({title:i.$t("dashboard.indicator.delete.confirmTitle"),content:i.$t("dashboard.indicator.delete.confirmContent",{name:t.name}),okText:i.$t("dashboard.indicator.delete.confirmOk"),okType:"danger",cancelText:i.$t("dashboard.indicator.delete.confirmCancel"),onOk:function(){var e=(0,c.A)((0,l.A)().m(function e(){var r,a,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,f.Ay)({url:"/api/indicator/deleteIndicator",method:"post",data:{id:t.id,userid:n.value}});case 1:if(r=e.v,1!==r.code){e.n=3;break}return u.A.success(i.$t("dashboard.indicator.delete.success")),a="custom-"+t.id,ie(a)&&Qt(a),e.n=2,re();case 2:e.n=4;break;case 3:u.A.error(r.msg||i.$t("dashboard.indicator.delete.failed"));case 4:e.n=6;break;case 5:e.p=5,o=e.v,u.A.error(i.$t("dashboard.indicator.delete.failed")+": "+(o.message||"未知错误"));case 6:return e.a(2)}},e,null,[[0,5]])}));function r(){return e.apply(this,arguments)}return r}()})},me=function(t){ft.value=(0,d.A)({},t),pt.value=!0},ye=function(t){gt.value=(0,d.A)({},t),vt.value=!0},be=function(t){yt.value=t,mt.value=!0},xe=function(t){xt.value=(0,d.A)({},t),Ct.value=t.pricing_type||"free",St.value=t.price||10,kt.value=t.description||"",At.value=!!t.vip_free,bt.value=!0},_e=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e,r;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return _t.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:kt.value,publishToCommunity:!0,pricingType:Ct.value,price:"paid"===Ct.value?St.value:0,vipFree:"paid"===Ct.value&&At.value}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.success")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.failed"));case 6:t.n=8;break;case 7:t.p=7,r=t.v,u.A.error(i.$t("dashboard.indicator.publish.failed")+": "+(r.message||""));case 8:return t.p=8,_t.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),we=function(){var t=(0,c.A)((0,l.A)().m(function t(){var e;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value&&xt.value){t.n=1;break}return t.a(2);case 1:return wt.value=!0,t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:xt.value.id,code:xt.value.code,name:xt.value.name,description:xt.value.description,publishToCommunity:!1,pricingType:"free",price:0,vipFree:!1}});case 3:if(e=t.v,1!==e.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.publish.unpublishSuccess")),bt.value=!1,xt.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(e.msg||i.$t("dashboard.indicator.publish.unpublishFailed"));case 6:t.n=8;break;case 7:t.p=7,t.v,u.A.error(i.$t("dashboard.indicator.publish.unpublishFailed"));case 8:return t.p=8,wt.value=!1,t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(){return t.apply(this,arguments)}}(),Ce=function(){var t=(0,c.A)((0,l.A)().m(function t(e){var r,a,o;return(0,l.A)().w(function(t){while(1)switch(t.p=t.n){case 0:if(n.value){t.n=1;break}return u.A.error(i.$t("dashboard.indicator.error.pleaseLogin")),t.a(2);case 1:return r=i.$refs.indicatorEditor,r&&(r.saving=!0),t.p=2,t.n=3,(0,f.Ay)({url:"/api/indicator/saveIndicator",method:"post",data:{userid:n.value,id:e.id||0,code:e.code}});case 3:if(a=t.v,1!==a.code){t.n=5;break}return u.A.success(i.$t("dashboard.indicator.save.success")),dt.value=!1,ht.value=null,t.n=4,re();case 4:t.n=6;break;case 5:u.A.error(a.msg||i.$t("dashboard.indicator.save.failed"));case 6:t.n=8;break;case 7:t.p=7,o=t.v,u.A.error(i.$t("dashboard.indicator.save.failed")+": "+(o.message||"未知错误"));case 8:return t.p=8,r&&(r.saving=!1),t.f(8);case 9:return t.a(2)}},t,null,[[2,7,8,9]])}));return function(e){return t.apply(this,arguments)}}(),Se=function(t){var e=t.end_time;if(1===e||"1"===e)return i.$t("dashboard.indicator.status.normalPermanent");if(!e||0===e)return i.$t("dashboard.indicator.status.normal");var n=Math.floor(Date.now()/1e3);return e0&&!S.value&&(S.value=P.value[0].value),S.value&&qt(S.value)):(E.value=null,k.value="",A.value=[],L.value=!1,D.value&&(clearTimeout(D.value),D.value=null))}),(0,h.wB)(function(){return ot.value},function(t){if(it.value&&nt.value&&rt.value){var e="".concat(rt.value,"-").concat(nt.value.id);lt.value[e]=JSON.parse(JSON.stringify(t))}},{deep:!0,immediate:!1}),(0,h.wB)(it,function(t){t||ue()}),{userId:n,klineChart:ae,searchSymbol:p,symbolSuggestions:m,watchlist:y,symbolSearchValue:x,symbolSearchOpen:_,currentSymbol:H,currentMarket:K,currentPrice:Y,priceChange:X,priceChangeClass:U,timeframe:G,loadingWatchlist:b,activeIndicators:j,trendIndicators:Dt,oscillatorIndicators:Pt,customIndicators:Q,purchasedIndicators:tt,loadingIndicators:et,realtimeEnabled:Mt,toggleRealtime:Ee,handleSymbolSearch:Ot,handleSymbolSelect:Wt,handleDropdownVisibleChange:zt,filterSymbolOption:Vt,getMarketName:Me,getMarketColor:Ie,setTimeframe:Lt,addIndicator:Jt,removeIndicator:Qt,isIndicatorActive:ie,loadIndicators:re,addPythonIndicator:oe,toggleIndicator:se,getIndicatorStatus:Se,getIndicatorStatusIcon:ke,getIndicatorStatusClass:Ae,getExpiryTimeText:Te,formatParams:Rt,loadWatchlist:Bt,getCustomActiveIndicators:ne,showIndicatorEditor:dt,editingIndicator:ht,handleCreateIndicator:pe,handleRunIndicator:he,handleSaveIndicator:Ce,handleEditIndicator:fe,handleDeleteIndicator:ge,toggleCustomSection:ve,customSectionCollapsed:ct,purchasedSectionCollapsed:ut,handlePriceChange:It,handleChartRetry:Et,handleIndicatorToggle:te,showParamsModal:it,pendingIndicator:nt,indicatorParams:at,indicatorParamValues:ot,loadingParams:st,confirmIndicatorParams:le,cancelIndicatorParams:ce,handleParamsModalAfterClose:de,showBacktestModal:pt,backtestIndicator:ft,handleOpenBacktest:me,showBacktestHistoryDrawer:vt,backtestHistoryIndicator:gt,handleOpenBacktestHistory:ye,showBacktestRunViewer:mt,selectedBacktestRun:yt,handleViewBacktestRun:be,showPublishModal:bt,publishIndicator:xt,publishing:_t,unpublishing:wt,publishPricingType:Ct,publishPrice:St,publishDescription:kt,publishVipFree:At,publishRules:Tt,handlePublishIndicator:xe,handleConfirmPublish:_e,handleUnpublish:we,selectedSymbol:H,selectedMarket:K,selectedTimeframe:G,isMobile:q,showAddStockModal:w,addingStock:C,selectedMarketTab:S,symbolSearchKeyword:k,symbolSearchResults:A,searchingSymbols:T,hotSymbols:M,loadingHotSymbols:I,selectedSymbolForAdd:E,marketTypes:P,hasSearched:L,handleCloseAddStockModal:Ht,handleMarketTabChange:Kt,handleSymbolSearchInput:Yt,handleSearchOrInput:Xt,searchSymbolsInModal:Ut,selectSymbol:jt,loadHotSymbols:qt,handleAddStock:Zt,handleDirectAdd:Gt,loadMarketTypes:$t,showQuickTrade:R,qtSymbol:F,qtSide:B,qtPrice:N,isCryptoMarket:O,openQuickTrade:z,onQuickTradeSuccess:W,handleQuickTradeSymbolChange:V,goToIndicatorMarket:$}}},la=sa,ca=(0,T.A)(la,n,r,!1,null,"b17e86c2",null),ua=ca.exports},55218:function(t,e,i){(function(t){t(i(15237))})(function(t){var e={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},i=t.Pos;function n(t,i){return"pairs"==i&&"string"==typeof t?t:"object"==typeof t&&null!=t[i]?t[i]:e[i]}t.defineOption("autoCloseBrackets",!1,function(e,i,o){o&&o!=t.Init&&(e.removeKeyMap(r),e.state.closeBrackets=null),i&&(a(n(i,"pairs")),e.state.closeBrackets=i,e.addKeyMap(r))});var r={Backspace:l,Enter:c};function a(t){for(var e=0;e=0;l--){var u=o[l].head;e.replaceRange("",i(u.line,u.ch-1),i(u.line,u.ch+1),"+delete")}}function c(e){var i=s(e),r=i&&n(i,"explode");if(!r||e.getOption("disableInput"))return t.Pass;for(var a=e.listSelections(),o=0;o0?{line:o.head.line,ch:o.head.ch+e}:{line:o.head.line-1};i.push({anchor:s,head:s})}t.setSelections(i,r)}function d(e){var n=t.cmpPos(e.anchor,e.head)>0;return{anchor:new i(e.anchor.line,e.anchor.ch+(n?-1:1)),head:new i(e.head.line,e.head.ch+(n?1:-1))}}function h(e,r){var a=s(e);if(!a||e.getOption("disableInput"))return t.Pass;var o=n(a,"pairs"),l=o.indexOf(r);if(-1==l)return t.Pass;for(var c,h=n(a,"closeBefore"),p=n(a,"triples"),v=o.charAt(l+1)==r,g=e.listSelections(),m=l%2==0,y=0;y1&&p.indexOf(r)>=0&&e.getRange(i(_.line,_.ch-2),_)==r+r){if(_.ch>2&&/\bstring/.test(e.getTokenTypeAt(i(_.line,_.ch-2))))return t.Pass;b="addFour"}else if(v){var C=0==_.ch?" ":e.getRange(i(_.line,_.ch-1),_);if(t.isWordChar(w)||C==r||t.isWordChar(C))return t.Pass;b="both"}else{if(!m||!(0===w.length||/\s/.test(w)||h.indexOf(w)>-1))return t.Pass;b="both"}else b=v&&f(e,_)?"both":p.indexOf(r)>=0&&e.getRange(_,i(_.line,_.ch+3))==r+r+r?"skipThree":"skip";if(c){if(c!=b)return t.Pass}else c=b}var S=l%2?o.charAt(l-1):r,k=l%2?r:o.charAt(l+1);e.operation(function(){if("skip"==c)u(e,1);else if("skipThree"==c)u(e,3);else if("surround"==c){for(var t=e.getSelections(),i=0;i",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function r(t){return t&&t.bracketRegex||/[(){}[\]]/}function a(t,e,a){var s=t.getLineHandle(e.line),l=e.ch-1,c=a&&a.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var u=r(a),d=!c&&l>=0&&u.test(s.text.charAt(l))&&n[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&n[s.text.charAt(++l)];if(!d)return null;var h=">"==d.charAt(1)?1:-1;if(a&&a.strict&&h>0!=(l==e.ch))return null;var p=t.getTokenTypeAt(i(e.line,l+1)),f=o(t,i(e.line,l+(h>0?1:0)),h,p,a);return null==f?null:{from:i(e.line,l),to:f&&f.pos,match:f&&f.ch==d.charAt(0),forward:h>0}}function o(t,e,a,o,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=r(s),h=a>0?Math.min(e.line+c,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-c),p=e.line;p!=h;p+=a){var f=t.getLine(p);if(f){var v=a>0?0:f.length-1,g=a>0?f.length:-1;if(!(f.length>l))for(p==e.line&&(v=e.ch-(a<0?1:0));v!=g;v+=a){var m=f.charAt(v);if(d.test(m)&&(void 0===o||(t.getTokenTypeAt(i(p,v+1))||"")==(o||""))){var y=n[m];if(y&&">"==y.charAt(1)==a>0)u.push(m);else{if(!u.length)return{pos:i(p,v),ch:m};u.pop()}}}}}return p-a!=(a>0?t.lastLine():t.firstLine())&&null}function s(t,n,r){for(var o=t.state.matchBrackets.maxHighlightLineLength||1e3,s=r&&r.highlightNonMatching,l=[],c=t.listSelections(),u=0;u2),m=/Android/.test(t),y=g||m||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(t),b=g||/Mac/.test(e),x=/\bCrOS\b/.test(t),_=/win/i.test(e),w=h&&t.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(h=!1,l=!0);var C=b&&(c||h&&(null==w||w<12.11)),S=i||o&&s>=9;function k(t){return new RegExp("(^|\\s)"+t+"(?:$|\\s)\\s*")}var A,T=function(t,e){var i=t.className,n=k(e).exec(i);if(n){var r=i.slice(n.index+n[0].length);t.className=i.slice(0,n.index)+(r?n[1]+r:"")}};function M(t){for(var e=t.childNodes.length;e>0;--e)t.removeChild(t.firstChild);return t}function I(t,e){return M(t).appendChild(e)}function E(t,e,i,n){var r=document.createElement(t);if(i&&(r.className=i),n&&(r.style.cssText=n),"string"==typeof e)r.appendChild(document.createTextNode(e));else if(e)for(var a=0;a=e)return o+(e-a);o+=s-a,o+=i-o%i,a=s+1}}g?B=function(t){t.selectionStart=0,t.selectionEnd=t.value.length}:o&&(B=function(t){try{t.select()}catch(e){}});var K=function(){this.id=null,this.f=null,this.time=0,this.handler=V(this.onTimeout,this)};function Y(t,e){for(var i=0;i=e)return n+Math.min(o,e-r);if(r+=a-n,r+=i-r%i,n=a+1,r>=e)return n}}var J=[""];function Q(t){while(J.length<=t)J.push(tt(J)+" ");return J[t]}function tt(t){return t[t.length-1]}function et(t,e){for(var i=[],n=0;n"€"&&(t.toUpperCase()!=t.toLowerCase()||at.test(t))}function st(t,e){return e?!!(e.source.indexOf("\\w")>-1&&ot(t))||e.test(t):ot(t)}function lt(t){for(var e in t)if(t.hasOwnProperty(e)&&t[e])return!1;return!0}var ct=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ut(t){return t.charCodeAt(0)>=768&&ct.test(t)}function dt(t,e,i){while((i<0?e>0:ei?-1:1;;){if(e==i)return e;var r=(e+i)/2,a=n<0?Math.ceil(r):Math.floor(r);if(a==e)return t(a)?e:i;t(a)?i=a:e=a+n}}function pt(t,e,i,n){if(!t)return n(e,i,"ltr",0);for(var r=!1,a=0;ae||e==i&&o.to==e)&&(n(Math.max(o.from,e),Math.min(o.to,i),1==o.level?"rtl":"ltr",a),r=!0)}r||n(e,i,"ltr")}var ft=null;function vt(t,e,i){var n;ft=null;for(var r=0;re)return r;a.to==e&&(a.from!=a.to&&"before"==i?n=r:ft=r),a.from==e&&(a.from!=a.to&&"before"!=i?n=r:ft=r)}return null!=n?n:ft}var gt=function(){var t="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",e="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function i(i){return i<=247?t.charAt(i):1424<=i&&i<=1524?"R":1536<=i&&i<=1785?e.charAt(i-1536):1774<=i&&i<=2220?"r":8192<=i&&i<=8203?"w":8204==i?"b":"L"}var n=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,r=/[stwN]/,a=/[LRr]/,o=/[Lb1n]/,s=/[1n]/;function l(t,e,i){this.level=t,this.from=e,this.to=i}return function(t,e){var c="ltr"==e?"L":"R";if(0==t.length||"ltr"==e&&!n.test(t))return!1;for(var u=t.length,d=[],h=0;h-1&&(n[e]=r.slice(0,a).concat(r.slice(a+1)))}}}function wt(t,e){var i=xt(t,e);if(i.length)for(var n=Array.prototype.slice.call(arguments,2),r=0;r0}function At(t){t.prototype.on=function(t,e){bt(this,t,e)},t.prototype.off=function(t,e){_t(this,t,e)}}function Tt(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function Mt(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0}function It(t){return null!=t.defaultPrevented?t.defaultPrevented:0==t.returnValue}function Et(t){Tt(t),Mt(t)}function Dt(t){return t.target||t.srcElement}function Pt(t){var e=t.which;return null==e&&(1&t.button?e=1:2&t.button?e=3:4&t.button&&(e=2)),b&&t.ctrlKey&&1==e&&(e=3),e}var Lt,Rt,Ft=function(){if(o&&s<9)return!1;var t=E("div");return"draggable"in t||"dragDrop"in t}();function Bt(t){if(null==Lt){var e=E("span","​");I(t,E("span",[e,document.createTextNode("x")])),0!=t.firstChild.offsetHeight&&(Lt=e.offsetWidth<=1&&e.offsetHeight>2&&!(o&&s<8))}var i=Lt?E("span","​"):E("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Nt(t){if(null!=Rt)return Rt;var e=I(t,document.createTextNode("AخA")),i=A(e,0,1).getBoundingClientRect(),n=A(e,1,2).getBoundingClientRect();return M(t),!(!i||i.left==i.right)&&(Rt=n.right-i.right<3)}var Ot=3!="\n\nb".split(/\n/).length?function(t){var e=0,i=[],n=t.length;while(e<=n){var r=t.indexOf("\n",e);-1==r&&(r=t.length);var a=t.slice(e,"\r"==t.charAt(r-1)?r-1:r),o=a.indexOf("\r");-1!=o?(i.push(a.slice(0,o)),e+=o+1):(i.push(a),e=r+1)}return i}:function(t){return t.split(/\r\n?|\n/)},zt=window.getSelection?function(t){try{return t.selectionStart!=t.selectionEnd}catch(e){return!1}}:function(t){var e;try{e=t.ownerDocument.selection.createRange()}catch(i){}return!(!e||e.parentElement()!=t)&&0!=e.compareEndPoints("StartToEnd",e)},Wt=function(){var t=E("div");return"oncopy"in t||(t.setAttribute("oncopy","return;"),"function"==typeof t.oncopy)}(),Vt=null;function $t(t){if(null!=Vt)return Vt;var e=I(t,E("span","x")),i=e.getBoundingClientRect(),n=A(e,0,1).getBoundingClientRect();return Vt=Math.abs(i.left-n.left)>1}var Ht={},Kt={};function Yt(t,e){arguments.length>2&&(e.dependencies=Array.prototype.slice.call(arguments,2)),Ht[t]=e}function Xt(t,e){Kt[t]=e}function Ut(t){if("string"==typeof t&&Kt.hasOwnProperty(t))t=Kt[t];else if(t&&"string"==typeof t.name&&Kt.hasOwnProperty(t.name)){var e=Kt[t.name];"string"==typeof e&&(e={name:e}),t=rt(e,t),t.name=e.name}else{if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+xml$/.test(t))return Ut("application/xml");if("string"==typeof t&&/^[\w\-]+\/[\w\-]+\+json$/.test(t))return Ut("application/json")}return"string"==typeof t?{name:t}:t||{name:"null"}}function Gt(t,e){e=Ut(e);var i=Ht[e.name];if(!i)return Gt(t,"text/plain");var n=i(t,e);if(jt.hasOwnProperty(e.name)){var r=jt[e.name];for(var a in r)r.hasOwnProperty(a)&&(n.hasOwnProperty(a)&&(n["_"+a]=n[a]),n[a]=r[a])}if(n.name=e.name,e.helperType&&(n.helperType=e.helperType),e.modeProps)for(var o in e.modeProps)n[o]=e.modeProps[o];return n}var jt={};function qt(t,e){var i=jt.hasOwnProperty(t)?jt[t]:jt[t]={};$(e,i)}function Zt(t,e){if(!0===e)return e;if(t.copyState)return t.copyState(e);var i={};for(var n in e){var r=e[n];r instanceof Array&&(r=r.concat([])),i[n]=r}return i}function Jt(t,e){var i;while(t.innerMode){if(i=t.innerMode(e),!i||i.mode==t)break;e=i.state,t=i.mode}return i||{mode:t,state:e}}function Qt(t,e,i){return!t.startState||t.startState(e,i)}var te=function(t,e,i){this.pos=this.start=0,this.string=t,this.tabSize=e||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=i};function ee(t,e){if(e-=t.first,e<0||e>=t.size)throw new Error("There is no line "+(e+t.first)+" in the document.");var i=t;while(!i.lines)for(var n=0;;++n){var r=i.children[n],a=r.chunkSize();if(e=t.first&&ei?ce(i,ee(t,i).text.length):me(e,ee(t,e.line).text.length)}function me(t,e){var i=t.ch;return null==i||i>e?ce(t.line,e):i<0?ce(t.line,0):t}function ye(t,e){for(var i=[],n=0;n=this.string.length},te.prototype.sol=function(){return this.pos==this.lineStart},te.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},te.prototype.next=function(){if(this.pose},te.prototype.eatSpace=function(){var t=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>t},te.prototype.skipToEnd=function(){this.pos=this.string.length},te.prototype.skipTo=function(t){var e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0},te.prototype.backUp=function(t){this.pos-=t},te.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==e&&(this.pos+=n[0].length),n)}var r=function(t){return i?t.toLowerCase():t},a=this.string.substr(this.pos,t.length);if(r(a)==r(t))return!1!==e&&(this.pos+=t.length),!0},te.prototype.current=function(){return this.string.slice(this.start,this.pos)},te.prototype.hideFirstChars=function(t,e){this.lineStart+=t;try{return e()}finally{this.lineStart-=t}},te.prototype.lookAhead=function(t){var e=this.lineOracle;return e&&e.lookAhead(t)},te.prototype.baseToken=function(){var t=this.lineOracle;return t&&t.baseToken(this.pos)};var be=function(t,e){this.state=t,this.lookAhead=e},xe=function(t,e,i,n){this.state=e,this.doc=t,this.line=i,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function _e(t,e,i,n){var r=[t.state.modeGen],a={};Ee(t,e.text,t.doc.mode,i,function(t,e){return r.push(t,e)},a,n);for(var o=i.state,s=function(n){i.baseTokens=r;var s=t.state.overlays[n],l=1,c=0;i.state=!0,Ee(t,e.text,s.mode,i,function(t,e){var i=l;while(ct&&r.splice(l,1,t,r[l+1],n),l+=2,c=Math.min(t,n)}if(e)if(s.opaque)r.splice(i,l-i,t,"overlay "+e),l=i+2;else for(;it.options.maxHighlightLength&&Zt(t.doc.mode,n.state),a=_e(t,e,n);r&&(n.state=r),e.stateAfter=n.save(!r),e.styles=a.styles,a.classes?e.styleClasses=a.classes:e.styleClasses&&(e.styleClasses=null),i===t.doc.highlightFrontier&&(t.doc.modeFrontier=Math.max(t.doc.modeFrontier,++t.doc.highlightFrontier))}return e.styles}function Ce(t,e,i){var n=t.doc,r=t.display;if(!n.mode.startState)return new xe(n,!0,e);var a=De(t,e,i),o=a>n.first&&ee(n,a-1).stateAfter,s=o?xe.fromSaved(n,o,a):new xe(n,Qt(n.mode),a);return n.iter(a,e,function(i){Se(t,i.text,s);var n=s.line;i.stateAfter=n==e-1||n%5==0||n>=r.viewFrom&&ne.start)return a}throw new Error("Mode "+t.name+" failed to advance stream.")}xe.prototype.lookAhead=function(t){var e=this.doc.getLine(this.line+t);return null!=e&&t>this.maxLookAhead&&(this.maxLookAhead=t),e},xe.prototype.baseToken=function(t){if(!this.baseTokens)return null;while(this.baseTokens[this.baseTokenPos]<=t)this.baseTokenPos+=2;var e=this.baseTokens[this.baseTokenPos+1];return{type:e&&e.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-t}},xe.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},xe.fromSaved=function(t,e,i){return e instanceof be?new xe(t,Zt(t.mode,e.state),i,e.lookAhead):new xe(t,Zt(t.mode,e),i)},xe.prototype.save=function(t){var e=!1!==t?Zt(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new be(e,this.maxLookAhead):e};var Te=function(t,e,i){this.start=t.start,this.end=t.pos,this.string=t.current(),this.type=e||null,this.state=i};function Me(t,e,i,n){var r,a=t.doc,o=a.mode;e=ge(a,e);var s,l=ee(a,e.line),c=Ce(t,e.line,i),u=new te(l.text,t.options.tabSize,c);n&&(s=[]);while((n||u.post.options.maxHighlightLength?(s=!1,o&&Se(t,e,n,d.pos),d.pos=e.length,l=null):l=Ie(Ae(i,d,n.state,h),a),h){var p=h[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){while(co;--s){if(s<=a.first)return a.first;var l=ee(a,s-1),c=l.stateAfter;if(c&&(!i||s+(c instanceof be?c.lookAhead:0)<=a.modeFrontier))return s;var u=H(l.text,null,t.options.tabSize);(null==r||n>u)&&(r=s-1,n=u)}return r}function Pe(t,e){if(t.modeFrontier=Math.min(t.modeFrontier,e),!(t.highlightFrontieri;n--){var r=ee(t,n).stateAfter;if(r&&(!(r instanceof be)||n+r.lookAhead=e:a.to>e);(n||(n=[])).push(new Ne(o,a.from,l?null:a.to))}}return n}function $e(t,e,i){var n;if(t)for(var r=0;r=e:a.to>e);if(s||a.from==e&&"bookmark"==o.type&&(!i||a.marker.insertLeft)){var l=null==a.from||(o.inclusiveLeft?a.from<=e:a.from0&&s)for(var x=0;x0)){var u=[l,1],d=ue(c.from,s.from),h=ue(c.to,s.to);(d<0||!o.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(h>0||!o.inclusiveRight&&!h)&&u.push({from:s.to,to:c.to}),r.splice.apply(r,u),l+=u.length-3}}return r}function Xe(t){var e=t.markedSpans;if(e){for(var i=0;ie)&&(!i||qe(i,a.marker)<0)&&(i=a.marker)}return i}function ei(t,e,i,n,r){var a=ee(t,e),o=Re&&a.markedSpans;if(o)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.to,i)>=0:ue(c.to,i)>0)||u>=0&&(l.marker.inclusiveRight&&r.inclusiveLeft?ue(c.from,n)<=0:ue(c.from,n)<0)))return!0}}}function ii(t){var e;while(e=Je(t))t=e.find(-1,!0).line;return t}function ni(t){var e;while(e=Qe(t))t=e.find(1,!0).line;return t}function ri(t){var e,i;while(e=Qe(t))t=e.find(1,!0).line,(i||(i=[])).push(t);return i}function ai(t,e){var i=ee(t,e),n=ii(i);return i==n?e:ae(n)}function oi(t,e){if(e>t.lastLine())return e;var i,n=ee(t,e);if(!si(t,n))return e;while(i=Qe(n))n=i.find(1,!0).line;return ae(n)+1}function si(t,e){var i=Re&&e.markedSpans;if(i)for(var n=void 0,r=0;re.maxLineLength&&(e.maxLineLength=i,e.maxLine=t)})}var hi=function(t,e,i){this.text=t,Ue(this,e),this.height=i?i(this):1};function pi(t,e,i,n){t.text=e,t.stateAfter&&(t.stateAfter=null),t.styles&&(t.styles=null),null!=t.order&&(t.order=null),Xe(t),Ue(t,i);var r=n?n(t):1;r!=t.height&&re(t,r)}function fi(t){t.parent=null,Xe(t)}hi.prototype.lineNo=function(){return ae(this)},At(hi);var vi={},gi={};function mi(t,e){if(!t||/^\s*$/.test(t))return null;var i=e.addModeClass?gi:vi;return i[t]||(i[t]=t.replace(/\S+/g,"cm-$&"))}function yi(t,e){var i=D("span",null,null,l?"padding-right: .1px":null),n={pre:D("pre",[i],"CodeMirror-line"),content:i,col:0,pos:0,cm:t,trailingSpace:!1,splitSpaces:t.getOption("lineWrapping")};e.measure={};for(var r=0;r<=(e.rest?e.rest.length:0);r++){var a=r?e.rest[r-1]:e.line,o=void 0;n.pos=0,n.addToken=xi,Nt(t.display.measure)&&(o=mt(a,t.doc.direction))&&(n.addToken=wi(n.addToken,o)),n.map=[];var s=e!=t.display.externalMeasured&&ae(a);Si(a,n,we(t,a,s)),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=F(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=F(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Bt(t.display.measure))),0==r?(e.measure.map=n.map,e.measure.cache={}):((e.measure.maps||(e.measure.maps=[])).push(n.map),(e.measure.caches||(e.measure.caches=[])).push({}))}if(l){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return wt(t,"renderLine",t,e.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function bi(t){var e=E("span","•","cm-invalidchar");return e.title="\\u"+t.charCodeAt(0).toString(16),e.setAttribute("aria-label",e.title),e}function xi(t,e,i,n,r,a,l){if(e){var c,u=t.splitSpaces?_i(e,t.trailingSpace):e,d=t.cm.state.specialChars,h=!1;if(d.test(e)){c=document.createDocumentFragment();var p=0;while(1){d.lastIndex=p;var f=d.exec(e),v=f?f.index-p:e.length-p;if(v){var g=document.createTextNode(u.slice(p,p+v));o&&s<9?c.appendChild(E("span",[g])):c.appendChild(g),t.map.push(t.pos,t.pos+v,g),t.col+=v,t.pos+=v}if(!f)break;p+=v+1;var m=void 0;if("\t"==f[0]){var y=t.cm.options.tabSize,b=y-t.col%y;m=c.appendChild(E("span",Q(b),"cm-tab")),m.setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),t.col+=b}else"\r"==f[0]||"\n"==f[0]?(m=c.appendChild(E("span","\r"==f[0]?"␍":"␤","cm-invalidchar")),m.setAttribute("cm-text",f[0]),t.col+=1):(m=t.cm.options.specialCharPlaceholder(f[0]),m.setAttribute("cm-text",f[0]),o&&s<9?c.appendChild(E("span",[m])):c.appendChild(m),t.col+=1);t.map.push(t.pos,t.pos+1,m),t.pos++}}else t.col+=e.length,c=document.createTextNode(u),t.map.push(t.pos,t.pos+e.length,c),o&&s<9&&(h=!0),t.pos+=e.length;if(t.trailingSpace=32==u.charCodeAt(e.length-1),i||n||r||h||a||l){var x=i||"";n&&(x+=n),r&&(x+=r);var _=E("span",[c],x,a);if(l)for(var w in l)l.hasOwnProperty(w)&&"style"!=w&&"class"!=w&&_.setAttribute(w,l[w]);return t.content.appendChild(_)}t.content.appendChild(c)}}function _i(t,e){if(t.length>1&&!/ /.test(t))return t;for(var i=e,n="",r=0;rc&&d.from<=c)break;if(d.to>=u)return t(i,n,r,a,o,s,l);t(i,n.slice(0,d.to-c),r,a,null,s,l),a=null,n=n.slice(d.to-c),c=d.to}}}function Ci(t,e,i,n){var r=!n&&i.widgetNode;r&&t.map.push(t.pos,t.pos+e,r),!n&&t.cm.display.input.needsContentAttribute&&(r||(r=t.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",i.id)),r&&(t.cm.display.input.setUneditable(r),t.content.appendChild(r)),t.pos+=e,t.trailingSpace=!1}function Si(t,e,i){var n=t.markedSpans,r=t.text,a=0;if(n)for(var o,s,l,c,u,d,h,p=r.length,f=0,v=1,g="",m=0;;){if(m==f){l=c=u=s="",h=null,d=null,m=1/0;for(var y=[],b=void 0,x=0;xf||w.collapsed&&_.to==f&&_.from==f)){if(null!=_.to&&_.to!=f&&m>_.to&&(m=_.to,c=""),w.className&&(l+=" "+w.className),w.css&&(s=(s?s+";":"")+w.css),w.startStyle&&_.from==f&&(u+=" "+w.startStyle),w.endStyle&&_.to==m&&(b||(b=[])).push(w.endStyle,_.to),w.title&&((h||(h={})).title=w.title),w.attributes)for(var C in w.attributes)(h||(h={}))[C]=w.attributes[C];w.collapsed&&(!d||qe(d.marker,w)<0)&&(d=_)}else _.from>f&&m>_.from&&(m=_.from)}if(b)for(var S=0;S=p)break;var A=Math.min(p,m);while(1){if(g){var T=f+g.length;if(!d){var M=T>A?g.slice(0,A-f):g;e.addToken(e,M,o?o+l:l,u,f+M.length==m?c:"",s,h)}if(T>=A){g=g.slice(A-f),f=A;break}f=T,u=""}g=r.slice(a,a=i[v++]),o=mi(i[v++],e.cm.options)}}else for(var I=1;I2&&a.push((l.bottom+c.top)/2-i.top)}}a.push(i.bottom-i.top)}}function en(t,e,i){if(t.line==e)return{map:t.measure.map,cache:t.measure.cache};if(t.rest){for(var n=0;ni)return{map:t.measure.maps[r],cache:t.measure.caches[r],before:!0}}}function nn(t,e){e=ii(e);var i=ae(e),n=t.display.externalMeasured=new ki(t.doc,e,i);n.lineN=i;var r=n.built=yi(t,n);return n.text=r.pre,I(t.display.lineMeasure,r.pre),n}function rn(t,e,i,n){return sn(t,on(t,e),i,n)}function an(t,e){if(e>=t.display.viewFrom&&e=i.lineN&&ee)&&(a=l-s,r=a-1,e>=l&&(o="right")),null!=r){if(n=t[c+2],s==l&&i==(n.insertLeft?"left":"right")&&(o=i),"left"==i&&0==r)while(c&&t[c-2]==t[c-3]&&t[c-1].insertLeft)n=t[2+(c-=3)],o="left";if("right"==i&&r==l-s)while(c=0;r--)if((i=t[r]).left!=i.right)break;return i}function hn(t,e,i,n){var r,a=un(e.map,i,n),l=a.node,c=a.start,u=a.end,d=a.collapse;if(3==l.nodeType){for(var h=0;h<4;h++){while(c&&ut(e.line.text.charAt(a.coverStart+c)))--c;while(a.coverStart+u0&&(d=n="right"),r=t.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==n?p.length-1:0]:l.getBoundingClientRect()}if(o&&s<9&&!c&&(!r||!r.left&&!r.right)){var f=l.parentNode.getClientRects()[0];r=f?{left:f.left,right:f.left+Rn(t.display),top:f.top,bottom:f.bottom}:cn}for(var v=r.top-e.rect.top,g=r.bottom-e.rect.top,m=(v+g)/2,y=e.view.measure.heights,b=0;b=n.text.length?(l=n.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return o("before"==c?l-1:l,"before"==c);function u(t,e,i){var n=s[e],r=1==n.level;return o(i?t-1:t,r!=i)}var d=vt(s,l,c),h=ft,p=u(l,d,"before"==c);return null!=h&&(p.other=u(l,h,"before"!=c)),p}function Sn(t,e){var i=0;e=ge(t.doc,e),t.options.lineWrapping||(i=Rn(t.display)*e.ch);var n=ee(t.doc,e.line),r=ci(n)+Gi(t.display);return{left:i,right:i,top:r,bottom:r+n.height}}function kn(t,e,i,n,r){var a=ce(t,e,i);return a.xRel=r,n&&(a.outside=n),a}function An(t,e,i){var n=t.doc;if(i+=t.display.viewOffset,i<0)return kn(n.first,0,null,-1,-1);var r=oe(n,i),a=n.first+n.size-1;if(r>a)return kn(n.first+n.size-1,ee(n,a).text.length,null,1,1);e<0&&(e=0);for(var o=ee(n,r);;){var s=En(t,o,r,e,i),l=ti(o,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==r)return c;o=ee(n,r=c.line)}}function Tn(t,e,i,n){n-=bn(e);var r=e.text.length,a=ht(function(e){return sn(t,i,e-1).bottom<=n},r,0);return r=ht(function(e){return sn(t,i,e).top>n},a,r),{begin:a,end:r}}function Mn(t,e,i,n){i||(i=on(t,e));var r=xn(t,e,sn(t,i,n),"line").top;return Tn(t,e,i,r)}function In(t,e,i,n){return!(t.bottom<=i)&&(t.top>i||(n?t.left:t.right)>e)}function En(t,e,i,n,r){r-=ci(e);var a=on(t,e),o=bn(e),s=0,l=e.text.length,c=!0,u=mt(e,t.doc.direction);if(u){var d=(t.options.lineWrapping?Pn:Dn)(t,e,i,a,u,n,r);c=1!=d.level,s=c?d.from:d.to-1,l=c?d.to:d.from-1}var h,p,f=null,v=null,g=ht(function(e){var i=sn(t,a,e);return i.top+=o,i.bottom+=o,!!In(i,n,r,!1)&&(i.top<=r&&i.left<=n&&(f=e,v=i),!0)},s,l),m=!1;if(v){var y=n-v.left=x.bottom?1:0}return g=dt(e.text,g,1),kn(i,g,p,m,n-h)}function Dn(t,e,i,n,r,a,o){var s=ht(function(s){var l=r[s],c=1!=l.level;return In(Cn(t,ce(i,c?l.to:l.from,c?"before":"after"),"line",e,n),a,o,!0)},0,r.length-1),l=r[s];if(s>0){var c=1!=l.level,u=Cn(t,ce(i,c?l.from:l.to,c?"after":"before"),"line",e,n);In(u,a,o,!0)&&u.top>o&&(l=r[s-1])}return l}function Pn(t,e,i,n,r,a,o){var s=Tn(t,e,n,o),l=s.begin,c=s.end;/\s/.test(e.text.charAt(c-1))&&c--;for(var u=null,d=null,h=0;h=c||p.to<=l)){var f=1!=p.level,v=sn(t,n,f?Math.min(c,p.to)-1:Math.max(l,p.from)).right,g=vg)&&(u=p,d=g)}}return u||(u=r[r.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function Ln(t){if(null!=t.cachedTextHeight)return t.cachedTextHeight;if(null==ln){ln=E("pre",null,"CodeMirror-line-like");for(var e=0;e<49;++e)ln.appendChild(document.createTextNode("x")),ln.appendChild(E("br"));ln.appendChild(document.createTextNode("x"))}I(t.measure,ln);var i=ln.offsetHeight/50;return i>3&&(t.cachedTextHeight=i),M(t.measure),i||1}function Rn(t){if(null!=t.cachedCharWidth)return t.cachedCharWidth;var e=E("span","xxxxxxxxxx"),i=E("pre",[e],"CodeMirror-line-like");I(t.measure,i);var n=e.getBoundingClientRect(),r=(n.right-n.left)/10;return r>2&&(t.cachedCharWidth=r),r||10}function Fn(t){for(var e=t.display,i={},n={},r=e.gutters.clientLeft,a=e.gutters.firstChild,o=0;a;a=a.nextSibling,++o){var s=t.display.gutterSpecs[o].className;i[s]=a.offsetLeft+a.clientLeft+r,n[s]=a.clientWidth}return{fixedPos:Bn(e),gutterTotalWidth:e.gutters.offsetWidth,gutterLeft:i,gutterWidth:n,wrapperWidth:e.wrapper.clientWidth}}function Bn(t){return t.scroller.getBoundingClientRect().left-t.sizer.getBoundingClientRect().left}function Nn(t){var e=Ln(t.display),i=t.options.lineWrapping,n=i&&Math.max(5,t.display.scroller.clientWidth/Rn(t.display)-3);return function(r){if(si(t.doc,r))return 0;var a=0;if(r.widgets)for(var o=0;o0&&(l=ee(t.doc,c.line).text).length==c.ch){var u=H(l,l.length,t.options.tabSize)-l.length;c=ce(c.line,Math.max(0,Math.round((a-qi(t.display).left)/Rn(t.display))-u))}return c}function Wn(t,e){if(e>=t.display.viewTo)return null;if(e-=t.display.viewFrom,e<0)return null;for(var i=t.display.view,n=0;ne)&&(r.updateLineNumbers=e),t.curOp.viewChanged=!0,e>=r.viewTo)Re&&ai(t.doc,e)r.viewFrom?Hn(t):(r.viewFrom+=n,r.viewTo+=n);else if(e<=r.viewFrom&&i>=r.viewTo)Hn(t);else if(e<=r.viewFrom){var a=Kn(t,i,i+n,1);a?(r.view=r.view.slice(a.index),r.viewFrom=a.lineN,r.viewTo+=n):Hn(t)}else if(i>=r.viewTo){var o=Kn(t,e,e,-1);o?(r.view=r.view.slice(0,o.index),r.viewTo=o.lineN):Hn(t)}else{var s=Kn(t,e,e,-1),l=Kn(t,i,i+n,1);s&&l?(r.view=r.view.slice(0,s.index).concat(Ai(t,s.lineN,l.lineN)).concat(r.view.slice(l.index)),r.viewTo+=n):Hn(t)}var c=r.externalMeasured;c&&(i=r.lineN&&e=n.viewTo)){var a=n.view[Wn(t,e)];if(null!=a.node){var o=a.changes||(a.changes=[]);-1==Y(o,i)&&o.push(i)}}}function Hn(t){t.display.viewFrom=t.display.viewTo=t.doc.first,t.display.view=[],t.display.viewOffset=0}function Kn(t,e,i,n){var r,a=Wn(t,e),o=t.display.view;if(!Re||i==t.doc.first+t.doc.size)return{index:a,lineN:i};for(var s=t.display.viewFrom,l=0;l0){if(a==o.length-1)return null;r=s+o[a].size-e,a++}else r=s-e;e+=r,i+=r}while(ai(t.doc,i)!=i){if(a==(n<0?0:o.length-1))return null;i+=n*o[a-(n<0?1:0)].size,a+=n}return{index:a,lineN:i}}function Yn(t,e,i){var n=t.display,r=n.view;0==r.length||e>=n.viewTo||i<=n.viewFrom?(n.view=Ai(t,e,i),n.viewFrom=e):(n.viewFrom>e?n.view=Ai(t,e,n.viewFrom).concat(n.view):n.viewFromi&&(n.view=n.view.slice(0,Wn(t,i)))),n.viewTo=i}function Xn(t){for(var e=t.display.view,i=0,n=0;n=t.display.viewTo||l.to().line0?o:t.defaultCharWidth())+"px"}if(n.other){var s=i.appendChild(E("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function qn(t,e){return t.top-e.top||t.left-e.left}function Zn(t,e,i){var n=t.display,r=t.doc,a=document.createDocumentFragment(),o=qi(t.display),s=o.left,l=Math.max(n.sizerWidth,Ji(t)-n.sizer.offsetLeft)-o.right,c="ltr"==r.direction;function u(t,e,i,n){e<0&&(e=0),e=Math.round(e),n=Math.round(n),a.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+t+"px;\n top: "+e+"px; width: "+(null==i?l-t:i)+"px;\n height: "+(n-e)+"px"))}function d(e,i,n){var a,o,d=ee(r,e),h=d.text.length;function p(i,n){return wn(t,ce(e,i),"div",d,n)}function f(e,i,n){var r=Mn(t,d,null,e),a="ltr"==i==("after"==n)?"left":"right",o="after"==n?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1);return p(o,a)[a]}var v=mt(d,r.direction);return pt(v,i||0,null==n?h:n,function(t,e,r,d){var g="ltr"==r,m=p(t,g?"left":"right"),y=p(e-1,g?"right":"left"),b=null==i&&0==t,x=null==n&&e==h,_=0==d,w=!v||d==v.length-1;if(y.top-m.top<=3){var C=(c?b:x)&&_,S=(c?x:b)&&w,k=C?s:(g?m:y).left,A=S?l:(g?y:m).right;u(k,m.top,A-k,m.bottom)}else{var T,M,I,E;g?(T=c&&b&&_?s:m.left,M=c?l:f(t,r,"before"),I=c?s:f(e,r,"after"),E=c&&x&&w?l:y.right):(T=c?f(t,r,"before"):s,M=!c&&b&&_?l:m.right,I=!c&&x&&w?s:y.left,E=c?f(e,r,"after"):l),u(T,m.top,M-T,m.bottom),m.bottom0?e.blinker=setInterval(function(){t.hasFocus()||ir(t),e.cursorDiv.style.visibility=(i=!i)?"":"hidden"},t.options.cursorBlinkRate):t.options.cursorBlinkRate<0&&(e.cursorDiv.style.visibility="hidden")}}function Qn(t){t.hasFocus()||(t.display.input.focus(),t.state.focused||er(t))}function tr(t){t.state.delayingBlurEvent=!0,setTimeout(function(){t.state.delayingBlurEvent&&(t.state.delayingBlurEvent=!1,t.state.focused&&ir(t))},100)}function er(t,e){t.state.delayingBlurEvent&&!t.state.draggingText&&(t.state.delayingBlurEvent=!1),"nocursor"!=t.options.readOnly&&(t.state.focused||(wt(t,"focus",t,e),t.state.focused=!0,R(t.display.wrapper,"CodeMirror-focused"),t.curOp||t.display.selForContextMenu==t.doc.sel||(t.display.input.reset(),l&&setTimeout(function(){return t.display.input.reset(!0)},20)),t.display.input.receivedFocus()),Jn(t))}function ir(t,e){t.state.delayingBlurEvent||(t.state.focused&&(wt(t,"blur",t,e),t.state.focused=!1,T(t.display.wrapper,"CodeMirror-focused")),clearInterval(t.display.blinker),setTimeout(function(){t.state.focused||(t.display.shift=!1)},150))}function nr(t){for(var e=t.display,i=e.lineDiv.offsetTop,n=Math.max(0,e.scroller.getBoundingClientRect().top),r=e.lineDiv.getBoundingClientRect().top,a=0,l=0;l.005||v<-.005)&&(rt.display.sizerWidth){var m=Math.ceil(h/Rn(t.display));m>t.display.maxLineLength&&(t.display.maxLineLength=m,t.display.maxLine=c.line,t.display.maxLineChanged=!0)}}}Math.abs(a)>2&&(e.scroller.scrollTop+=a)}function rr(t){if(t.widgets)for(var e=0;e=o&&(a=oe(e,ci(ee(e,l))-t.wrapper.clientHeight),o=l)}return{from:a,to:Math.max(o,a+1)}}function or(t,e){if(!Ct(t,"scrollCursorIntoView")){var i=t.display,n=i.sizer.getBoundingClientRect(),r=null,a=i.wrapper.ownerDocument;if(e.top+n.top<0?r=!0:e.bottom+n.top>(a.defaultView.innerHeight||a.documentElement.clientHeight)&&(r=!1),null!=r&&!v){var o=E("div","​",null,"position: absolute;\n top: "+(e.top-i.viewOffset-Gi(t.display))+"px;\n height: "+(e.bottom-e.top+Zi(t)+i.barHeight)+"px;\n left: "+e.left+"px; width: "+Math.max(2,e.right-e.left)+"px;");t.display.lineSpace.appendChild(o),o.scrollIntoView(r),t.display.lineSpace.removeChild(o)}}}function sr(t,e,i,n){var r;null==n&&(n=0),t.options.lineWrapping||e!=i||(i="before"==e.sticky?ce(e.line,e.ch+1,"before"):e,e=e.ch?ce(e.line,"before"==e.sticky?e.ch-1:e.ch,"after"):e);for(var a=0;a<5;a++){var o=!1,s=Cn(t,e),l=i&&i!=e?Cn(t,i):s;r={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-n,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+n};var c=cr(t,r),u=t.doc.scrollTop,d=t.doc.scrollLeft;if(null!=c.scrollTop&&(gr(t,c.scrollTop),Math.abs(t.doc.scrollTop-u)>1&&(o=!0)),null!=c.scrollLeft&&(yr(t,c.scrollLeft),Math.abs(t.doc.scrollLeft-d)>1&&(o=!0)),!o)break}return r}function lr(t,e){var i=cr(t,e);null!=i.scrollTop&&gr(t,i.scrollTop),null!=i.scrollLeft&&yr(t,i.scrollLeft)}function cr(t,e){var i=t.display,n=Ln(t.display);e.top<0&&(e.top=0);var r=t.curOp&&null!=t.curOp.scrollTop?t.curOp.scrollTop:i.scroller.scrollTop,a=Qi(t),o={};e.bottom-e.top>a&&(e.bottom=e.top+a);var s=t.doc.height+ji(i),l=e.tops-n;if(e.topr+a){var u=Math.min(e.top,(c?s:e.bottom)-a);u!=r&&(o.scrollTop=u)}var d=t.options.fixedGutter?0:i.gutters.offsetWidth,h=t.curOp&&null!=t.curOp.scrollLeft?t.curOp.scrollLeft:i.scroller.scrollLeft-d,p=Ji(t)-i.gutters.offsetWidth,f=e.right-e.left>p;return f&&(e.right=e.left+p),e.left<10?o.scrollLeft=0:e.leftp+h-3&&(o.scrollLeft=e.right+(f?0:10)-p),o}function ur(t,e){null!=e&&(fr(t),t.curOp.scrollTop=(null==t.curOp.scrollTop?t.doc.scrollTop:t.curOp.scrollTop)+e)}function dr(t){fr(t);var e=t.getCursor();t.curOp.scrollToPos={from:e,to:e,margin:t.options.cursorScrollMargin}}function hr(t,e,i){null==e&&null==i||fr(t),null!=e&&(t.curOp.scrollLeft=e),null!=i&&(t.curOp.scrollTop=i)}function pr(t,e){fr(t),t.curOp.scrollToPos=e}function fr(t){var e=t.curOp.scrollToPos;if(e){t.curOp.scrollToPos=null;var i=Sn(t,e.from),n=Sn(t,e.to);vr(t,i,n,e.margin)}}function vr(t,e,i,n){var r=cr(t,{left:Math.min(e.left,i.left),top:Math.min(e.top,i.top)-n,right:Math.max(e.right,i.right),bottom:Math.max(e.bottom,i.bottom)+n});hr(t,r.scrollLeft,r.scrollTop)}function gr(t,e){Math.abs(t.doc.scrollTop-e)<2||(i||Ur(t,{top:e}),mr(t,e,!0),i&&Ur(t),zr(t,100))}function mr(t,e,i){e=Math.max(0,Math.min(t.display.scroller.scrollHeight-t.display.scroller.clientHeight,e)),(t.display.scroller.scrollTop!=e||i)&&(t.doc.scrollTop=e,t.display.scrollbars.setScrollTop(e),t.display.scroller.scrollTop!=e&&(t.display.scroller.scrollTop=e))}function yr(t,e,i,n){e=Math.max(0,Math.min(e,t.display.scroller.scrollWidth-t.display.scroller.clientWidth)),(i?e==t.doc.scrollLeft:Math.abs(t.doc.scrollLeft-e)<2)&&!n||(t.doc.scrollLeft=e,Zr(t),t.display.scroller.scrollLeft!=e&&(t.display.scroller.scrollLeft=e),t.display.scrollbars.setScrollLeft(e))}function br(t){var e=t.display,i=e.gutters.offsetWidth,n=Math.round(t.doc.height+ji(t.display));return{clientHeight:e.scroller.clientHeight,viewHeight:e.wrapper.clientHeight,scrollWidth:e.scroller.scrollWidth,clientWidth:e.scroller.clientWidth,viewWidth:e.wrapper.clientWidth,barLeft:t.options.fixedGutter?i:0,docHeight:n,scrollHeight:n+Zi(t)+e.barHeight,nativeBarWidth:e.nativeBarWidth,gutterWidth:i}}var xr=function(t,e,i){this.cm=i;var n=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=r.tabIndex=-1,t(n),t(r),bt(n,"scroll",function(){n.clientHeight&&e(n.scrollTop,"vertical")}),bt(r,"scroll",function(){r.clientWidth&&e(r.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,o&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};xr.prototype.update=function(t){var e=t.scrollWidth>t.clientWidth+1,i=t.scrollHeight>t.clientHeight+1,n=t.nativeBarWidth;if(i){this.vert.style.display="block",this.vert.style.bottom=e?n+"px":"0";var r=t.viewHeight-(e?n:0);this.vert.firstChild.style.height=Math.max(0,t.scrollHeight-t.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(e){this.horiz.style.display="block",this.horiz.style.right=i?n+"px":"0",this.horiz.style.left=t.barLeft+"px";var a=t.viewWidth-t.barLeft-(i?n:0);this.horiz.firstChild.style.width=Math.max(0,t.scrollWidth-t.clientWidth+a)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&t.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:i?n:0,bottom:e?n:0}},xr.prototype.setScrollLeft=function(t){this.horiz.scrollLeft!=t&&(this.horiz.scrollLeft=t),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},xr.prototype.setScrollTop=function(t){this.vert.scrollTop!=t&&(this.vert.scrollTop=t),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},xr.prototype.zeroWidthHack=function(){var t=b&&!f?"12px":"18px";this.horiz.style.height=this.vert.style.width=t,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new K,this.disableVert=new K},xr.prototype.enableZeroWidthBar=function(t,e,i){function n(){var r=t.getBoundingClientRect(),a="vert"==i?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1);a!=t?t.style.visibility="hidden":e.set(1e3,n)}t.style.visibility="",e.set(1e3,n)},xr.prototype.clear=function(){var t=this.horiz.parentNode;t.removeChild(this.horiz),t.removeChild(this.vert)};var _r=function(){};function wr(t,e){e||(e=br(t));var i=t.display.barWidth,n=t.display.barHeight;Cr(t,e);for(var r=0;r<4&&i!=t.display.barWidth||n!=t.display.barHeight;r++)i!=t.display.barWidth&&t.options.lineWrapping&&nr(t),Cr(t,br(t)),i=t.display.barWidth,n=t.display.barHeight}function Cr(t,e){var i=t.display,n=i.scrollbars.update(e);i.sizer.style.paddingRight=(i.barWidth=n.right)+"px",i.sizer.style.paddingBottom=(i.barHeight=n.bottom)+"px",i.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(i.scrollbarFiller.style.display="block",i.scrollbarFiller.style.height=n.bottom+"px",i.scrollbarFiller.style.width=n.right+"px"):i.scrollbarFiller.style.display="",n.bottom&&t.options.coverGutterNextToScrollbar&&t.options.fixedGutter?(i.gutterFiller.style.display="block",i.gutterFiller.style.height=n.bottom+"px",i.gutterFiller.style.width=e.gutterWidth+"px"):i.gutterFiller.style.display=""}_r.prototype.update=function(){return{bottom:0,right:0}},_r.prototype.setScrollLeft=function(){},_r.prototype.setScrollTop=function(){},_r.prototype.clear=function(){};var Sr={native:xr,null:_r};function kr(t){t.display.scrollbars&&(t.display.scrollbars.clear(),t.display.scrollbars.addClass&&T(t.display.wrapper,t.display.scrollbars.addClass)),t.display.scrollbars=new Sr[t.options.scrollbarStyle](function(e){t.display.wrapper.insertBefore(e,t.display.scrollbarFiller),bt(e,"mousedown",function(){t.state.focused&&setTimeout(function(){return t.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,i){"horizontal"==i?yr(t,e):gr(t,e)},t),t.display.scrollbars.addClass&&R(t.display.wrapper,t.display.scrollbars.addClass)}var Ar=0;function Tr(t){t.curOp={cm:t,viewChanged:!1,startHeight:t.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Ar,markArrays:null},Mi(t.curOp)}function Mr(t){var e=t.curOp;e&&Ei(e,function(t){for(var e=0;e=i.viewTo)||i.maxLineChanged&&e.options.lineWrapping,t.update=t.mustUpdate&&new Vr(e,t.mustUpdate&&{top:t.scrollTop,ensure:t.scrollToPos},t.forceUpdate)}function Dr(t){t.updatedDisplay=t.mustUpdate&&Yr(t.cm,t.update)}function Pr(t){var e=t.cm,i=e.display;t.updatedDisplay&&nr(e),t.barMeasure=br(e),i.maxLineChanged&&!e.options.lineWrapping&&(t.adjustWidthTo=rn(e,i.maxLine,i.maxLine.text.length).left+3,e.display.sizerWidth=t.adjustWidthTo,t.barMeasure.scrollWidth=Math.max(i.scroller.clientWidth,i.sizer.offsetLeft+t.adjustWidthTo+Zi(e)+e.display.barWidth),t.maxScrollLeft=Math.max(0,i.sizer.offsetLeft+t.adjustWidthTo-Ji(e))),(t.updatedDisplay||t.selectionChanged)&&(t.preparedSelection=i.input.prepareSelection())}function Lr(t){var e=t.cm;null!=t.adjustWidthTo&&(e.display.sizer.style.minWidth=t.adjustWidthTo+"px",t.maxScrollLeft=t.display.viewTo)){var i=+new Date+t.options.workTime,n=Ce(t,e.highlightFrontier),r=[];e.iter(n.line,Math.min(e.first+e.size,t.display.viewTo+500),function(a){if(n.line>=t.display.viewFrom){var o=a.styles,s=a.text.length>t.options.maxHighlightLength?Zt(e.mode,n.state):null,l=_e(t,a,n,!0);s&&(n.state=s),a.styles=l.styles;var c=a.styleClasses,u=l.classes;u?a.styleClasses=u:c&&(a.styleClasses=null);for(var d=!o||o.length!=a.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),h=0;!d&&hi)return zr(t,t.options.workDelay),!0}),e.highlightFrontier=n.line,e.modeFrontier=Math.max(e.modeFrontier,n.line),r.length&&Fr(t,function(){for(var e=0;e=i.viewFrom&&e.visible.to<=i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo)&&i.renderedView==i.view&&0==Xn(t))return!1;Jr(t)&&(Hn(t),e.dims=Fn(t));var r=n.first+n.size,a=Math.max(e.visible.from-t.options.viewportMargin,n.first),o=Math.min(r,e.visible.to+t.options.viewportMargin);i.viewFromo&&i.viewTo-o<20&&(o=Math.min(r,i.viewTo)),Re&&(a=ai(t.doc,a),o=oi(t.doc,o));var s=a!=i.viewFrom||o!=i.viewTo||i.lastWrapHeight!=e.wrapperHeight||i.lastWrapWidth!=e.wrapperWidth;Yn(t,a,o),i.viewOffset=ci(ee(t.doc,i.viewFrom)),t.display.mover.style.top=i.viewOffset+"px";var l=Xn(t);if(!s&&0==l&&!e.force&&i.renderedView==i.view&&(null==i.updateLineNumbers||i.updateLineNumbers>=i.viewTo))return!1;var c=Hr(t);return l>4&&(i.lineDiv.style.display="none"),Gr(t,i.updateLineNumbers,e.dims),l>4&&(i.lineDiv.style.display=""),i.renderedView=i.view,Kr(c),M(i.cursorDiv),M(i.selectionDiv),i.gutters.style.height=i.sizer.style.minHeight=0,s&&(i.lastWrapHeight=e.wrapperHeight,i.lastWrapWidth=e.wrapperWidth,zr(t,400)),i.updateLineNumbers=null,!0}function Xr(t,e){for(var i=e.viewport,n=!0;;n=!1){if(n&&t.options.lineWrapping&&e.oldDisplayWidth!=Ji(t))n&&(e.visible=ar(t.display,t.doc,i));else if(i&&null!=i.top&&(i={top:Math.min(t.doc.height+ji(t.display)-Qi(t),i.top)}),e.visible=ar(t.display,t.doc,i),e.visible.from>=t.display.viewFrom&&e.visible.to<=t.display.viewTo)break;if(!Yr(t,e))break;nr(t);var r=br(t);Un(t),wr(t,r),qr(t,r),e.force=!1}e.signal(t,"update",t),t.display.viewFrom==t.display.reportedViewFrom&&t.display.viewTo==t.display.reportedViewTo||(e.signal(t,"viewportChange",t,t.display.viewFrom,t.display.viewTo),t.display.reportedViewFrom=t.display.viewFrom,t.display.reportedViewTo=t.display.viewTo)}function Ur(t,e){var i=new Vr(t,e);if(Yr(t,i)){nr(t),Xr(t,i);var n=br(t);Un(t),wr(t,n),qr(t,n),i.finish()}}function Gr(t,e,i){var n=t.display,r=t.options.lineNumbers,a=n.lineDiv,o=a.firstChild;function s(e){var i=e.nextSibling;return l&&b&&t.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),i}for(var c=n.view,u=n.viewFrom,d=0;d-1&&(p=!1),Ri(t,h,u,i)),p&&(M(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(le(t.options,u)))),o=h.node.nextSibling}else{var f=$i(t,h,u,i);a.insertBefore(f,o)}u+=h.size}while(o)o=s(o)}function jr(t){var e=t.gutters.offsetWidth;t.sizer.style.marginLeft=e+"px",Pi(t,"gutterChanged",t)}function qr(t,e){t.display.sizer.style.minHeight=e.docHeight+"px",t.display.heightForcer.style.top=e.docHeight+"px",t.display.gutters.style.height=e.docHeight+t.display.barHeight+Zi(t)+"px"}function Zr(t){var e=t.display,i=e.view;if(e.alignWidgets||e.gutters.firstChild&&t.options.fixedGutter){for(var n=Bn(e)-e.scroller.scrollLeft+t.doc.scrollLeft,r=e.gutters.offsetWidth,a=n+"px",o=0;oc.clientWidth,f=c.scrollHeight>c.clientHeight;if(r&&p||a&&f){if(a&&b&&l)t:for(var v=e.target,g=s.view;v!=c;v=v.parentNode)for(var m=0;m=0&&ue(t,n.to())<=0)return i}return-1};var ca=function(t,e){this.anchor=t,this.head=e};function ua(t,e,i){var n=t&&t.options.selectionsMayTouch,r=e[i];e.sort(function(t,e){return ue(t.from(),e.from())}),i=Y(e,r);for(var a=1;a0:l>=0){var c=fe(s.from(),o.from()),u=pe(s.to(),o.to()),d=s.empty()?o.from()==o.head:s.from()==s.head;a<=i&&--i,e.splice(--a,2,new ca(d?u:c,d?c:u))}}return new la(e,i)}function da(t,e){return new la([new ca(t,e||t)],0)}function ha(t){return t.text?ce(t.from.line+t.text.length-1,tt(t.text).length+(1==t.text.length?t.from.ch:0)):t.to}function pa(t,e){if(ue(t,e.from)<0)return t;if(ue(t,e.to)<=0)return ha(e);var i=t.line+e.text.length-(e.to.line-e.from.line)-1,n=t.ch;return t.line==e.to.line&&(n+=ha(e).ch-e.to.ch),ce(i,n)}function fa(t,e){for(var i=[],n=0;n1&&t.remove(s.line+1,f-1),t.insert(s.line+1,m)}Pi(t,"change",t,e)}function _a(t,e,i){function n(t,r,a){if(t.linked)for(var o=0;o1&&!t.done[t.done.length-2].ranges?(t.done.pop(),tt(t.done)):void 0}function Ia(t,e,i,n){var r=t.history;r.undone.length=0;var a,o,s=+new Date;if((r.lastOp==n||r.lastOrigin==e.origin&&e.origin&&("+"==e.origin.charAt(0)&&r.lastModTime>s-(t.cm?t.cm.options.historyEventDelay:500)||"*"==e.origin.charAt(0)))&&(a=Ma(r,r.lastOp==n)))o=tt(a.changes),0==ue(e.from,e.to)&&0==ue(e.from,o.to)?o.to=ha(e):a.changes.push(Aa(t,e));else{var l=tt(r.done);l&&l.ranges||Pa(t.sel,r.done),a={changes:[Aa(t,e)],generation:r.generation},r.done.push(a);while(r.done.length>r.undoDepth)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(i),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=s,r.lastOp=r.lastSelOp=n,r.lastOrigin=r.lastSelOrigin=e.origin,o||wt(t,"historyAdded")}function Ea(t,e,i,n){var r=e.charAt(0);return"*"==r||"+"==r&&i.ranges.length==n.ranges.length&&i.somethingSelected()==n.somethingSelected()&&new Date-t.history.lastSelTime<=(t.cm?t.cm.options.historyEventDelay:500)}function Da(t,e,i,n){var r=t.history,a=n&&n.origin;i==r.lastSelOp||a&&r.lastSelOrigin==a&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==a||Ea(t,a,tt(r.done),e))?r.done[r.done.length-1]=e:Pa(e,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=a,r.lastSelOp=i,n&&!1!==n.clearRedo&&Ta(r.undone)}function Pa(t,e){var i=tt(e);i&&i.ranges&&i.equals(t)||e.push(t)}function La(t,e,i,n){var r=e["spans_"+t.id],a=0;t.iter(Math.max(t.first,i),Math.min(t.first+t.size,n),function(i){i.markedSpans&&((r||(r=e["spans_"+t.id]={}))[a]=i.markedSpans),++a})}function Ra(t){if(!t)return null;for(var e,i=0;i-1&&(tt(s)[d]=c[d],delete c[d])}}}return n}function Oa(t,e,i,n){if(n){var r=t.anchor;if(i){var a=ue(e,r)<0;a!=ue(i,r)<0?(r=e,e=i):a!=ue(e,i)<0&&(e=i)}return new ca(r,e)}return new ca(i||e,e)}function za(t,e,i,n,r){null==r&&(r=t.cm&&(t.cm.display.shift||t.extend)),Ya(t,new la([Oa(t.sel.primary(),e,i,r)],0),n)}function Wa(t,e,i){for(var n=[],r=t.cm&&(t.cm.display.shift||t.extend),a=0;a=e.ch:s.to>e.ch))){if(r&&(wt(l,"beforeCursorEnter"),l.explicitlyCleared)){if(a.markedSpans){--o;continue}break}if(!l.atomic)continue;if(i){var d=l.find(n<0?1:-1),h=void 0;if((n<0?u:c)&&(d=Ja(t,d,-n,d&&d.line==e.line?a:null)),d&&d.line==e.line&&(h=ue(d,i))&&(n<0?h<0:h>0))return qa(t,d,e,n,r)}var p=l.find(n<0?-1:1);return(n<0?c:u)&&(p=Ja(t,p,n,p.line==e.line?a:null)),p?qa(t,p,e,n,r):null}}return e}function Za(t,e,i,n,r){var a=n||1,o=qa(t,e,i,a,r)||!r&&qa(t,e,i,a,!0)||qa(t,e,i,-a,r)||!r&&qa(t,e,i,-a,!0);return o||(t.cantEdit=!0,ce(t.first,0))}function Ja(t,e,i,n){return i<0&&0==e.ch?e.line>t.first?ge(t,ce(e.line-1)):null:i>0&&e.ch==(n||ee(t,e.line)).text.length?e.line=0;--r)io(t,{from:n[r].from,to:n[r].to,text:r?[""]:e.text,origin:e.origin});else io(t,e)}}function io(t,e){if(1!=e.text.length||""!=e.text[0]||0!=ue(e.from,e.to)){var i=fa(t,e);Ia(t,e,i,t.cm?t.cm.curOp.id:NaN),ao(t,e,i,He(t,e));var n=[];_a(t,function(t,i){i||-1!=Y(n,t.history)||(uo(t.history,e),n.push(t.history)),ao(t,e,null,He(t,e))})}}function no(t,e,i){var n=t.cm&&t.cm.state.suppressEdits;if(!n||i){for(var r,a=t.history,o=t.sel,s="undo"==e?a.done:a.undone,l="undo"==e?a.undone:a.done,c=0;c=0;--p){var f=h(p);if(f)return f.v}}}}function ro(t,e){if(0!=e&&(t.first+=e,t.sel=new la(et(t.sel.ranges,function(t){return new ca(ce(t.anchor.line+e,t.anchor.ch),ce(t.head.line+e,t.head.ch))}),t.sel.primIndex),t.cm)){Vn(t.cm,t.first,t.first-e,e);for(var i=t.cm.display,n=i.viewFrom;nt.lastLine())){if(e.from.linea&&(e={from:e.from,to:ce(a,ee(t,a).text.length),text:[e.text[0]],origin:e.origin}),e.removed=ie(t,e.from,e.to),i||(i=fa(t,e)),t.cm?oo(t.cm,e,n):xa(t,e,n),Xa(t,i,G),t.cantEdit&&Za(t,ce(t.firstLine(),0))&&(t.cantEdit=!1)}}function oo(t,e,i){var n=t.doc,r=t.display,a=e.from,o=e.to,s=!1,l=a.line;t.options.lineWrapping||(l=ae(ii(ee(n,a.line))),n.iter(l,o.line+1,function(t){if(t==r.maxLine)return s=!0,!0})),n.sel.contains(e.from,e.to)>-1&&St(t),xa(n,e,i,Nn(t)),t.options.lineWrapping||(n.iter(l,a.line+e.text.length,function(t){var e=ui(t);e>r.maxLineLength&&(r.maxLine=t,r.maxLineLength=e,r.maxLineChanged=!0,s=!1)}),s&&(t.curOp.updateMaxLine=!0)),Pe(n,a.line),zr(t,400);var c=e.text.length-(o.line-a.line)-1;e.full?Vn(t):a.line!=o.line||1!=e.text.length||ba(t.doc,e)?Vn(t,a.line,o.line+1,c):$n(t,a.line,"text");var u=kt(t,"changes"),d=kt(t,"change");if(d||u){var h={from:a,to:o,text:e.text,removed:e.removed,origin:e.origin};d&&Pi(t,"change",t,h),u&&(t.curOp.changeObjs||(t.curOp.changeObjs=[])).push(h)}t.display.selForContextMenu=null}function so(t,e,i,n,r){var a;n||(n=i),ue(n,i)<0&&(a=[n,i],i=a[0],n=a[1]),"string"==typeof e&&(e=t.splitLines(e)),eo(t,{from:i,to:n,text:e,origin:r})}function lo(t,e,i,n){i1||!(this.children[0]instanceof po))){var s=[];this.collapse(s),this.children=[new po(s)],this.children[0].parent=this}},collapse:function(t){for(var e=0;e50){for(var o=r.lines.length%25+25,s=o;s10);t.parent.maybeSpill()}},iterN:function(t,e,i){for(var n=0;n0||0==o&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=D("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(ei(t,e.line,e,i,a)||e.line!=i.line&&ei(t,i.line,e,i,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");Be()}a.addToHistory&&Ia(t,{from:e,to:i,origin:"markText"},t.sel,NaN);var s,l=e.line,c=t.cm;if(t.iter(l,i.line+1,function(n){c&&a.collapsed&&!c.options.lineWrapping&&ii(n)==c.display.maxLine&&(s=!0),a.collapsed&&l!=e.line&&re(n,0),We(n,new Ne(a,l==e.line?e.ch:null,l==i.line?i.ch:null),t.cm&&t.cm.curOp),++l}),a.collapsed&&t.iter(e.line,i.line+1,function(e){si(t,e)&&re(e,0)}),a.clearOnEnter&&bt(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Fe(),(t.history.done.length||t.history.undone.length)&&t.clearHistory()),a.collapsed&&(a.id=++yo,a.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),a.collapsed)Vn(c,e.line,i.line+1);else if(a.className||a.startStyle||a.endStyle||a.css||a.attributes||a.title)for(var u=e.line;u<=i.line;u++)$n(c,u,"text");a.atomic&&Ga(c.doc),Pi(c,"markerAdded",c,a)}return a}bo.prototype.clear=function(){if(!this.explicitlyCleared){var t=this.doc.cm,e=t&&!t.curOp;if(e&&Tr(t),kt(this,"clear")){var i=this.find();i&&Pi(this,"clear",i.from,i.to)}for(var n=null,r=null,a=0;at.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=u,t.display.maxLineChanged=!0)}null!=n&&t&&this.collapsed&&Vn(t,n,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Ga(t.doc)),t&&Pi(t,"markerCleared",t,this,n,r),e&&Mr(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(t,e){var i,n;null==t&&"bookmark"==this.type&&(t=1);for(var r=0;r=0;l--)eo(this,n[l]);s?Ka(this,s):this.cm&&dr(this.cm)}),undo:Or(function(){no(this,"undo")}),redo:Or(function(){no(this,"redo")}),undoSelection:Or(function(){no(this,"undo",!0)}),redoSelection:Or(function(){no(this,"redo",!0)}),setExtending:function(t){this.extend=t},getExtending:function(){return this.extend},historySize:function(){for(var t=this.history,e=0,i=0,n=0;n=t.ch)&&e.push(r.marker.parent||r.marker)}return e},findMarks:function(t,e,i){t=ge(this,t),e=ge(this,e);var n=[],r=t.line;return this.iter(t.line,e.line+1,function(a){var o=a.markedSpans;if(o)for(var s=0;s=l.to||null==l.from&&r!=t.line||null!=l.from&&r==e.line&&l.from>=e.ch||i&&!i(l.marker)||n.push(l.marker.parent||l.marker)}++r}),n},getAllMarks:function(){var t=[];return this.iter(function(e){var i=e.markedSpans;if(i)for(var n=0;nt)return e=t,!0;t-=a,++i}),ge(this,ce(i,e))},indexFromPos:function(t){t=ge(this,t);var e=t.ch;if(t.linee&&(e=t.from),null!=t.to&&t.to-1)return e.state.draggingText(t),void setTimeout(function(){return e.display.input.focus()},20);try{var d=t.dataTransfer.getData("Text");if(d){var h;if(e.state.draggingText&&!e.state.draggingText.copy&&(h=e.listSelections()),Xa(e.doc,da(i,i)),h)for(var p=0;p=0;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");dr(t)})}function Zo(t,e,i){var n=dt(t.text,e+i,i);return n<0||n>t.text.length?null:n}function Jo(t,e,i){var n=Zo(t,e.ch,i);return null==n?null:new ce(e.line,n,i<0?"after":"before")}function Qo(t,e,i,n,r){if(t){"rtl"==e.doc.direction&&(r=-r);var a=mt(i,e.doc.direction);if(a){var o,s=r<0?tt(a):a[0],l=r<0==(1==s.level),c=l?"after":"before";if(s.level>0||"rtl"==e.doc.direction){var u=on(e,i);o=r<0?i.text.length-1:0;var d=sn(e,u,o).top;o=ht(function(t){return sn(e,u,t).top==d},r<0==(1==s.level)?s.from:s.to-1,o),"before"==c&&(o=Zo(i,o,1))}else o=r<0?s.to:s.from;return new ce(n,o,c)}}return new ce(n,r<0?i.text.length:0,r<0?"before":"after")}function ts(t,e,i,n){var r=mt(e,t.doc.direction);if(!r)return Jo(e,i,n);i.ch>=e.text.length?(i.ch=e.text.length,i.sticky="before"):i.ch<=0&&(i.ch=0,i.sticky="after");var a=vt(r,i.ch,i.sticky),o=r[a];if("ltr"==t.doc.direction&&o.level%2==0&&(n>0?o.to>i.ch:o.from=o.from&&h>=u.begin)){var p=d?"before":"after";return new ce(i.line,h,p)}}var f=function(t,e,n){for(var a=function(t,e){return e?new ce(i.line,l(t,1),"before"):new ce(i.line,t,"after")};t>=0&&t0==(1!=o.level),c=s?n.begin:l(n.end,-1);if(o.from<=c&&c0?u.end:l(u.begin,-1);return null==g||n>0&&g==e.text.length||(v=f(n>0?0:r.length-1,n,c(g)),!v)?null:v}$o.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},$o.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},$o.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},$o.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},$o["default"]=b?$o.macDefault:$o.pcDefault;var es={selectAll:Qa,singleSelection:function(t){return t.setSelection(t.getCursor("anchor"),t.getCursor("head"),G)},killLine:function(t){return qo(t,function(e){if(e.empty()){var i=ee(t.doc,e.head.line).text.length;return e.head.ch==i&&e.head.line0)r=new ce(r.line,r.ch+1),t.replaceRange(a.charAt(r.ch-1)+a.charAt(r.ch-2),ce(r.line,r.ch-2),r,"+transpose");else if(r.line>t.doc.first){var o=ee(t.doc,r.line-1).text;o&&(r=new ce(r.line,1),t.replaceRange(a.charAt(0)+t.doc.lineSeparator()+o.charAt(o.length-1),ce(r.line-1,o.length-1),r,"+transpose"))}i.push(new ca(r,r))}t.setSelections(i)})},newlineAndIndent:function(t){return Fr(t,function(){for(var e=t.listSelections(),i=e.length-1;i>=0;i--)t.replaceRange(t.doc.lineSeparator(),e[i].anchor,e[i].head,"+input");e=t.listSelections();for(var n=0;n-1&&(ue((r=s.ranges[r]).from(),e)<0||e.xRel>0)&&(ue(r.to(),e)>0||e.xRel<0)?As(t,n,e,a):Ms(t,n,e,a)}function As(t,e,i,n){var r=t.display,a=!1,c=Br(t,function(e){l&&(r.scroller.draggable=!1),t.state.draggingText=!1,t.state.delayingBlurEvent&&(t.hasFocus()?t.state.delayingBlurEvent=!1:tr(t)),_t(r.wrapper.ownerDocument,"mouseup",c),_t(r.wrapper.ownerDocument,"mousemove",u),_t(r.scroller,"dragstart",d),_t(r.scroller,"drop",c),a||(Tt(e),n.addNew||za(t.doc,i,null,null,n.extend),l&&!p||o&&9==s?setTimeout(function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()},20):r.input.focus())}),u=function(t){a=a||Math.abs(e.clientX-t.clientX)+Math.abs(e.clientY-t.clientY)>=10},d=function(){return a=!0};l&&(r.scroller.draggable=!0),t.state.draggingText=c,c.copy=!n.moveOnDrag,bt(r.wrapper.ownerDocument,"mouseup",c),bt(r.wrapper.ownerDocument,"mousemove",u),bt(r.scroller,"dragstart",d),bt(r.scroller,"drop",c),t.state.delayingBlurEvent=!0,setTimeout(function(){return r.input.focus()},20),r.scroller.dragDrop&&r.scroller.dragDrop()}function Ts(t,e,i){if("char"==i)return new ca(e,e);if("word"==i)return t.findWordAt(e);if("line"==i)return new ca(ce(e.line,0),ge(t.doc,ce(e.line+1,0)));var n=i(t,e);return new ca(n.from,n.to)}function Ms(t,e,i,n){o&&tr(t);var r=t.display,a=t.doc;Tt(e);var s,l,c=a.sel,u=c.ranges;if(n.addNew&&!n.extend?(l=a.sel.contains(i),s=l>-1?u[l]:new ca(i,i)):(s=a.sel.primary(),l=a.sel.primIndex),"rectangle"==n.unit)n.addNew||(s=new ca(i,i)),i=zn(t,e,!0,!0),l=-1;else{var d=Ts(t,i,n.unit);s=n.extend?Oa(s,d.anchor,d.head,n.extend):d}n.addNew?-1==l?(l=u.length,Ya(a,ua(t,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==n.unit&&!n.extend?(Ya(a,ua(t,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=a.sel):Va(a,l,s,j):(l=0,Ya(a,new la([s],0),j),c=a.sel);var h=i;function p(e){if(0!=ue(h,e))if(h=e,"rectangle"==n.unit){for(var r=[],o=t.options.tabSize,u=H(ee(a,i.line).text,i.ch,o),d=H(ee(a,e.line).text,e.ch,o),p=Math.min(u,d),f=Math.max(u,d),v=Math.min(i.line,e.line),g=Math.min(t.lastLine(),Math.max(i.line,e.line));v<=g;v++){var m=ee(a,v).text,y=Z(m,p,o);p==f?r.push(new ca(ce(v,y),ce(v,y))):m.length>y&&r.push(new ca(ce(v,y),ce(v,Z(m,f,o))))}r.length||r.push(new ca(i,i)),Ya(a,ua(t,c.ranges.slice(0,l).concat(r),l),{origin:"*mouse",scroll:!1}),t.scrollIntoView(e)}else{var b,x=s,_=Ts(t,e,n.unit),w=x.anchor;ue(_.anchor,w)>0?(b=_.head,w=fe(x.from(),_.anchor)):(b=_.anchor,w=pe(x.to(),_.head));var C=c.ranges.slice(0);C[l]=Is(t,new ca(ge(a,w),b)),Ya(a,ua(t,C,l),j)}}var f=r.wrapper.getBoundingClientRect(),v=0;function g(e){var i=++v,o=zn(t,e,!0,"rectangle"==n.unit);if(o)if(0!=ue(o,h)){t.curOp.focus=L(O(t)),p(o);var s=ar(r,a);(o.line>=s.to||o.linef.bottom?20:0;l&&setTimeout(Br(t,function(){v==i&&(r.scroller.scrollTop+=l,g(e))}),50)}}function m(e){t.state.selectingText=!1,v=1/0,e&&(Tt(e),r.input.focus()),_t(r.wrapper.ownerDocument,"mousemove",y),_t(r.wrapper.ownerDocument,"mouseup",b),a.history.lastSelOrigin=null}var y=Br(t,function(t){0!==t.buttons&&Pt(t)?g(t):m(t)}),b=Br(t,m);t.state.selectingText=b,bt(r.wrapper.ownerDocument,"mousemove",y),bt(r.wrapper.ownerDocument,"mouseup",b)}function Is(t,e){var i=e.anchor,n=e.head,r=ee(t.doc,i.line);if(0==ue(i,n)&&i.sticky==n.sticky)return e;var a=mt(r);if(!a)return e;var o=vt(a,i.ch,i.sticky),s=a[o];if(s.from!=i.ch&&s.to!=i.ch)return e;var l,c=o+(s.from==i.ch==(1!=s.level)?0:1);if(0==c||c==a.length)return e;if(n.line!=i.line)l=(n.line-i.line)*("ltr"==t.doc.direction?1:-1)>0;else{var u=vt(a,n.ch,n.sticky),d=u-o||(n.ch-i.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var h=a[c+(l?-1:0)],p=l==(1==h.level),f=p?h.from:h.to,v=p?"after":"before";return i.ch==f&&i.sticky==v?e:new ca(new ce(i.line,f,v),n)}function Es(t,e,i,n){var r,a;if(e.touches)r=e.touches[0].clientX,a=e.touches[0].clientY;else try{r=e.clientX,a=e.clientY}catch(h){return!1}if(r>=Math.floor(t.display.gutters.getBoundingClientRect().right))return!1;n&&Tt(e);var o=t.display,s=o.lineDiv.getBoundingClientRect();if(a>s.bottom||!kt(t,i))return It(e);a-=s.top-o.viewOffset;for(var l=0;l=r){var u=oe(t.doc,a),d=t.display.gutterSpecs[l];return wt(t,i,t,u,d.className,e),It(e)}}}function Ds(t,e){return Es(t,e,"gutterClick",!0)}function Ps(t,e){Ui(t.display,e)||Ls(t,e)||Ct(t,e,"contextmenu")||S||t.display.input.onContextMenu(e)}function Ls(t,e){return!!kt(t,"gutterContextMenu")&&Es(t,e,"gutterContextMenu",!1)}function Rs(t){t.display.wrapper.className=t.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+t.options.theme.replace(/(^|\s)\s*/g," cm-s-"),gn(t)}xs.prototype.compare=function(t,e,i){return this.time+bs>t&&0==ue(e,this.pos)&&i==this.button};var Fs={toString:function(){return"CodeMirror.Init"}},Bs={},Ns={};function Os(t){var e=t.optionHandlers;function i(i,n,r,a){t.defaults[i]=n,r&&(e[i]=a?function(t,e,i){i!=Fs&&r(t,e,i)}:r)}t.defineOption=i,t.Init=Fs,i("value","",function(t,e){return t.setValue(e)},!0),i("mode",null,function(t,e){t.doc.modeOption=e,ma(t)},!0),i("indentUnit",2,ma,!0),i("indentWithTabs",!1),i("smartIndent",!0),i("tabSize",4,function(t){ya(t),gn(t),Vn(t)},!0),i("lineSeparator",null,function(t,e){if(t.doc.lineSep=e,e){var i=[],n=t.doc.first;t.doc.iter(function(t){for(var r=0;;){var a=t.text.indexOf(e,r);if(-1==a)break;r=a+e.length,i.push(ce(n,a))}n++});for(var r=i.length-1;r>=0;r--)so(t.doc,e,i[r],ce(i[r].line,i[r].ch+e.length))}}),i("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(t,e,i){t.state.specialChars=new RegExp(e.source+(e.test("\t")?"":"|\t"),"g"),i!=Fs&&t.refresh()}),i("specialCharPlaceholder",bi,function(t){return t.refresh()},!0),i("electricChars",!0),i("inputStyle",y?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),i("spellcheck",!1,function(t,e){return t.getInputField().spellcheck=e},!0),i("autocorrect",!1,function(t,e){return t.getInputField().autocorrect=e},!0),i("autocapitalize",!1,function(t,e){return t.getInputField().autocapitalize=e},!0),i("rtlMoveVisually",!_),i("wholeLineUpdateBefore",!0),i("theme","default",function(t){Rs(t),ea(t)},!0),i("keyMap","default",function(t,e,i){var n=jo(e),r=i!=Fs&&jo(i);r&&r.detach&&r.detach(t,n),n.attach&&n.attach(t,r||null)}),i("extraKeys",null),i("configureMouse",null),i("lineWrapping",!1,Ws,!0),i("gutters",[],function(t,e){t.display.gutterSpecs=Qr(e,t.options.lineNumbers),ea(t)},!0),i("fixedGutter",!0,function(t,e){t.display.gutters.style.left=e?Bn(t.display)+"px":"0",t.refresh()},!0),i("coverGutterNextToScrollbar",!1,function(t){return wr(t)},!0),i("scrollbarStyle","native",function(t){kr(t),wr(t),t.display.scrollbars.setScrollTop(t.doc.scrollTop),t.display.scrollbars.setScrollLeft(t.doc.scrollLeft)},!0),i("lineNumbers",!1,function(t,e){t.display.gutterSpecs=Qr(t.options.gutters,e),ea(t)},!0),i("firstLineNumber",1,ea,!0),i("lineNumberFormatter",function(t){return t},ea,!0),i("showCursorWhenSelecting",!1,Un,!0),i("resetSelectionOnContextMenu",!0),i("lineWiseCopyCut",!0),i("pasteLinesPerSelection",!0),i("selectionsMayTouch",!1),i("readOnly",!1,function(t,e){"nocursor"==e&&(ir(t),t.display.input.blur()),t.display.input.readOnlyChanged(e)}),i("screenReaderLabel",null,function(t,e){e=""===e?null:e,t.display.input.screenReaderLabelChanged(e)}),i("disableInput",!1,function(t,e){e||t.display.input.reset()},!0),i("dragDrop",!0,zs),i("allowDropFileTypes",null),i("cursorBlinkRate",530),i("cursorScrollMargin",0),i("cursorHeight",1,Un,!0),i("singleCursorHeightPerLine",!0,Un,!0),i("workTime",100),i("workDelay",100),i("flattenSpans",!0,ya,!0),i("addModeClass",!1,ya,!0),i("pollInterval",100),i("undoDepth",200,function(t,e){return t.doc.history.undoDepth=e}),i("historyEventDelay",1250),i("viewportMargin",10,function(t){return t.refresh()},!0),i("maxHighlightLength",1e4,ya,!0),i("moveInputWithCursor",!0,function(t,e){e||t.display.input.resetPosition()}),i("tabindex",null,function(t,e){return t.display.input.getField().tabIndex=e||""}),i("autofocus",null),i("direction","ltr",function(t,e){return t.doc.setDirection(e)},!0),i("phrases",null)}function zs(t,e,i){var n=i&&i!=Fs;if(!e!=!n){var r=t.display.dragFunctions,a=e?bt:_t;a(t.display.scroller,"dragstart",r.start),a(t.display.scroller,"dragenter",r.enter),a(t.display.scroller,"dragover",r.over),a(t.display.scroller,"dragleave",r.leave),a(t.display.scroller,"drop",r.drop)}}function Ws(t){t.options.lineWrapping?(R(t.display.wrapper,"CodeMirror-wrap"),t.display.sizer.style.minWidth="",t.display.sizerWidth=null):(T(t.display.wrapper,"CodeMirror-wrap"),di(t)),On(t),Vn(t),gn(t),setTimeout(function(){return wr(t)},100)}function Vs(t,e){var i=this;if(!(this instanceof Vs))return new Vs(t,e);this.options=e=e?$(e):{},$(Bs,e,!1);var n=e.value;"string"==typeof n?n=new To(n,e.mode,null,e.lineSeparator,e.direction):e.mode&&(n.modeOption=e.mode),this.doc=n;var r=new Vs.inputStyles[e.inputStyle](this),a=this.display=new ia(t,n,r,e);for(var c in a.wrapper.CodeMirror=this,Rs(this),e.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),kr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new K,keySeq:null,specialChars:null},e.autofocus&&!y&&a.input.focus(),o&&s<11&&setTimeout(function(){return i.display.input.reset(!0)},20),$s(this),Fo(),Tr(this),this.curOp.forceUpdate=!0,wa(this,n),e.autofocus&&!y||this.hasFocus()?setTimeout(function(){i.hasFocus()&&!i.state.focused&&er(i)},20):ir(this),Ns)Ns.hasOwnProperty(c)&&Ns[c](this,e[c],Fs);Jr(this),e.finishInit&&e.finishInit(this);for(var u=0;u400}bt(e.scroller,"touchstart",function(r){if(!Ct(t,r)&&!a(r)&&!Ds(t,r)){e.input.ensurePolled(),clearTimeout(i);var o=+new Date;e.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==r.touches.length&&(e.activeTouch.left=r.touches[0].pageX,e.activeTouch.top=r.touches[0].pageY)}}),bt(e.scroller,"touchmove",function(){e.activeTouch&&(e.activeTouch.moved=!0)}),bt(e.scroller,"touchend",function(i){var n=e.activeTouch;if(n&&!Ui(e,i)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,o=t.coordsChar(e.activeTouch,"page");a=!n.prev||l(n,n.prev)?new ca(o,o):!n.prev.prev||l(n,n.prev.prev)?t.findWordAt(o):new ca(ce(o.line,0),ge(t.doc,ce(o.line+1,0))),t.setSelection(a.anchor,a.head),t.focus(),Tt(i)}r()}),bt(e.scroller,"touchcancel",r),bt(e.scroller,"scroll",function(){e.scroller.clientHeight&&(gr(t,e.scroller.scrollTop),yr(t,e.scroller.scrollLeft,!0),wt(t,"scroll",t))}),bt(e.scroller,"mousewheel",function(e){return sa(t,e)}),bt(e.scroller,"DOMMouseScroll",function(e){return sa(t,e)}),bt(e.wrapper,"scroll",function(){return e.wrapper.scrollTop=e.wrapper.scrollLeft=0}),e.dragFunctions={enter:function(e){Ct(t,e)||Et(e)},over:function(e){Ct(t,e)||(Do(t,e),Et(e))},start:function(e){return Eo(t,e)},drop:Br(t,Io),leave:function(e){Ct(t,e)||Po(t)}};var c=e.input.getField();bt(c,"keyup",function(e){return vs.call(t,e)}),bt(c,"keydown",Br(t,ps)),bt(c,"keypress",Br(t,gs)),bt(c,"focus",function(e){return er(t,e)}),bt(c,"blur",function(e){return ir(t,e)})}Vs.defaults=Bs,Vs.optionHandlers=Ns;var Hs=[];function Ks(t,e,i,n){var r,a=t.doc;null==i&&(i="add"),"smart"==i&&(a.mode.indent?r=Ce(t,e).state:i="prev");var o=t.options.tabSize,s=ee(a,e),l=H(s.text,null,o);s.stateAfter&&(s.stateAfter=null);var c,u=s.text.match(/^\s*/)[0];if(n||/\S/.test(s.text)){if("smart"==i&&(c=a.mode.indent(r,s.text.slice(u.length),s.text),c==U||c>150)){if(!n)return;i="prev"}}else c=0,i="not";"prev"==i?c=e>a.first?H(ee(a,e-1).text,null,o):0:"add"==i?c=l+t.options.indentUnit:"subtract"==i?c=l-t.options.indentUnit:"number"==typeof i&&(c=l+i),c=Math.max(0,c);var d="",h=0;if(t.options.indentWithTabs)for(var p=Math.floor(c/o);p;--p)h+=o,d+="\t";if(ho,l=Ot(e),c=null;if(s&&n.ranges.length>1)if(Ys&&Ys.text.join("\n")==e){if(n.ranges.length%Ys.text.length==0){c=[];for(var u=0;u=0;h--){var p=n.ranges[h],f=p.from(),v=p.to();p.empty()&&(i&&i>0?f=ce(f.line,f.ch-i):t.state.overwrite&&!s?v=ce(v.line,Math.min(ee(a,v.line).text.length,v.ch+tt(l).length)):s&&Ys&&Ys.lineWise&&Ys.text.join("\n")==l.join("\n")&&(f=v=ce(f.line,0)));var g={from:f,to:v,text:c?c[h%c.length]:l,origin:r||(s?"paste":t.state.cutIncoming>o?"cut":"+input")};eo(t.doc,g),Pi(t,"inputRead",t,g)}e&&!s&&js(t,e),dr(t),t.curOp.updateInput<2&&(t.curOp.updateInput=d),t.curOp.typing=!0,t.state.pasteIncoming=t.state.cutIncoming=-1}function Gs(t,e){var i=t.clipboardData&&t.clipboardData.getData("Text");if(i)return t.preventDefault(),e.isReadOnly()||e.options.disableInput||!e.hasFocus()||Fr(e,function(){return Us(e,i,0,null,"paste")}),!0}function js(t,e){if(t.options.electricChars&&t.options.smartIndent)for(var i=t.doc.sel,n=i.ranges.length-1;n>=0;n--){var r=i.ranges[n];if(!(r.head.ch>100||n&&i.ranges[n-1].head.line==r.head.line)){var a=t.getModeAt(r.head),o=!1;if(a.electricChars){for(var s=0;s-1){o=Ks(t,r.head.line,"smart");break}}else a.electricInput&&a.electricInput.test(ee(t.doc,r.head.line).text.slice(0,r.head.ch))&&(o=Ks(t,r.head.line,"smart"));o&&Pi(t,"electricInput",t,r.head.line)}}}function qs(t){for(var e=[],i=[],n=0;ni&&(Ks(this,r.head.line,t,!0),i=r.head.line,n==this.doc.sel.primIndex&&dr(this));else{var a=r.from(),o=r.to(),s=Math.max(i,a.line);i=Math.min(this.lastLine(),o.line-(o.ch?0:1))+1;for(var l=s;l0&&Va(this.doc,n,new ca(a,c[n].to()),G)}}}),getTokenAt:function(t,e){return Me(this,t,e)},getLineTokens:function(t,e){return Me(this,ce(t),e,!0)},getTokenTypeAt:function(t){t=ge(this.doc,t);var e,i=we(this,ee(this.doc,t.line)),n=0,r=(i.length-1)/2,a=t.ch;if(0==a)e=i[2];else for(;;){var o=n+r>>1;if((o?i[2*o-1]:0)>=a)r=o;else{if(!(i[2*o+1]a&&(t=a,r=!0),n=ee(this.doc,t)}else n=t;return xn(this,n,{top:0,left:0},e||"page",i||r).top+(r?this.doc.height-ci(n):0)},defaultTextHeight:function(){return Ln(this.display)},defaultCharWidth:function(){return Rn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(t,e,i,n,r){var a=this.display;t=Cn(this,ge(this.doc,t));var o=t.bottom,s=t.left;if(e.style.position="absolute",e.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(e),a.sizer.appendChild(e),"over"==n)o=t.top;else if("above"==n||"near"==n){var l=Math.max(a.wrapper.clientHeight,this.doc.height),c=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||t.bottom+e.offsetHeight>l)&&t.top>e.offsetHeight?o=t.top-e.offsetHeight:t.bottom+e.offsetHeight<=l&&(o=t.bottom),s+e.offsetWidth>c&&(s=c-e.offsetWidth)}e.style.top=o+"px",e.style.left=e.style.right="","right"==r?(s=a.sizer.clientWidth-e.offsetWidth,e.style.right="0px"):("left"==r?s=0:"middle"==r&&(s=(a.sizer.clientWidth-e.offsetWidth)/2),e.style.left=s+"px"),i&&lr(this,{left:s,top:o,right:s+e.offsetWidth,bottom:o+e.offsetHeight})},triggerOnKeyDown:Nr(ps),triggerOnKeyPress:Nr(gs),triggerOnKeyUp:vs,triggerOnMouseDown:Nr(ws),execCommand:function(t){if(es.hasOwnProperty(t))return es[t].call(null,this)},triggerElectric:Nr(function(t){js(this,t)}),findPosH:function(t,e,i,n){var r=1;e<0&&(r=-1,e=-e);for(var a=ge(this.doc,t),o=0;o0&&s(i.charAt(n-1)))--n;while(r.5||this.options.lineWrapping)&&On(this),wt(this,"refresh",this)}),swapDoc:Nr(function(t){var e=this.doc;return e.cm=null,this.state.selectingText&&this.state.selectingText(),wa(this,t),gn(this),this.display.input.reset(),hr(this,t.scrollLeft,t.scrollTop),this.curOp.forceScroll=!0,Pi(this,"swapDoc",this,e),e}),phrase:function(t){var e=this.options.phrases;return e&&Object.prototype.hasOwnProperty.call(e,t)?e[t]:t},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},At(t),t.registerHelper=function(e,n,r){i.hasOwnProperty(e)||(i[e]=t[e]={_global:[]}),i[e][n]=r},t.registerGlobalHelper=function(e,n,r,a){t.registerHelper(e,n,a),i[e]._global.push({pred:r,val:a})}}function tl(t,e,i,n,r){var a=e,o=i,s=ee(t,e.line),l=r&&"rtl"==t.direction?-i:i;function c(){var i=e.line+l;return!(i=t.first+t.size)&&(e=new ce(i,e.ch,e.sticky),s=ee(t,i))}function u(a){var o;if("codepoint"==n){var u=s.text.charCodeAt(e.ch+(i>0?0:-1));if(isNaN(u))o=null;else{var d=i>0?u>=55296&&u<56320:u>=56320&&u<57343;o=new ce(e.line,Math.max(0,Math.min(s.text.length,e.ch+i*(d?2:1))),-i)}}else o=r?ts(t.cm,s,e,i):Jo(s,e,i);if(null==o){if(a||!c())return!1;e=Qo(r,t.cm,s,e.line,l)}else e=o;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var d=null,h="group"==n,p=t.cm&&t.cm.getHelper(e,"wordChars"),f=!0;;f=!1){if(i<0&&!u(!f))break;var v=s.text.charAt(e.ch)||"\n",g=st(v,p)?"w":h&&"\n"==v?"n":!h||/\s/.test(v)?null:"p";if(!h||f||g||(g="s"),d&&d!=g){i<0&&(i=1,u(),e.sticky="after");break}if(g&&(d=g),i>0&&!u(!f))break}var m=Za(t,e,a,o,!0);return de(a,m)&&(m.hitSide=!0),m}function el(t,e,i,n){var r,a,o=t.doc,s=e.left;if("page"==n){var l=Math.min(t.display.wrapper.clientHeight,W(t).innerHeight||o(t).documentElement.clientHeight),c=Math.max(l-.5*Ln(t.display),3);r=(i>0?e.bottom:e.top)+i*c}else"line"==n&&(r=i>0?e.bottom+3:e.top-3);for(;;){if(a=An(t,s,r),!a.outside)break;if(i<0?r<=0:r>=o.height){a.hitSide=!0;break}r+=5*i}return a}var il=function(t){this.cm=t,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new K,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function nl(t,e){var i=an(t,e.line);if(!i||i.hidden)return null;var n=ee(t.doc,e.line),r=en(i,n,e.line),a=mt(n,t.doc.direction),o="left";if(a){var s=vt(a,e.ch);o=s%2?"right":"left"}var l=un(r.map,e.ch,o);return l.offset="right"==l.collapse?l.end:l.start,l}function rl(t){for(var e=t;e;e=e.parentNode)if(/CodeMirror-gutter-wrapper/.test(e.className))return!0;return!1}function al(t,e){return e&&(t.bad=!0),t}function ol(t,e,i,n,r){var a="",o=!1,s=t.doc.lineSeparator(),l=!1;function c(t){return function(e){return e.id==t}}function u(){o&&(a+=s,l&&(a+=s),o=l=!1)}function d(t){t&&(u(),a+=t)}function h(e){if(1==e.nodeType){var i=e.getAttribute("cm-text");if(i)return void d(i);var a,p=e.getAttribute("cm-marker");if(p){var f=t.findMarks(ce(n,0),ce(r+1,0),c(+p));return void(f.length&&(a=f[0].find(0))&&d(ie(t.doc,a.from,a.to).join(s)))}if("false"==e.getAttribute("contenteditable"))return;var v=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;v&&u();for(var g=0;g=e.display.viewTo||a.line=e.display.viewFrom&&nl(e,r)||{node:l[0].measure.map[2],offset:0},u=a.linen.firstLine()&&(o=ce(o.line-1,ee(n.doc,o.line-1).length)),s.ch==ee(n.doc,s.line).text.length&&s.liner.viewTo-1)return!1;o.line==r.viewFrom||0==(t=Wn(n,o.line))?(e=ae(r.view[0].line),i=r.view[0].node):(e=ae(r.view[t].line),i=r.view[t-1].node.nextSibling);var l,c,u=Wn(n,s.line);if(u==r.view.length-1?(l=r.viewTo-1,c=r.lineDiv.lastChild):(l=ae(r.view[u+1].line)-1,c=r.view[u+1].node.previousSibling),!i)return!1;var d=n.doc.splitLines(ol(n,i,c,e,l)),h=ie(n.doc,ce(e,0),ce(l,ee(n.doc,l).text.length));while(d.length>1&&h.length>1)if(tt(d)==tt(h))d.pop(),h.pop(),l--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),e++}var p=0,f=0,v=d[0],g=h[0],m=Math.min(v.length,g.length);while(po.ch&&y.charCodeAt(y.length-f-1)==b.charCodeAt(b.length-f-1))p--,f++;d[d.length-1]=y.slice(0,y.length-f).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var _=ce(e,p),w=ce(l,h.length?tt(h).length-f:0);return d.length>1||d[0]||ue(_,w)?(so(n.doc,d,_,w,"+input"),!0):void 0},il.prototype.ensurePolled=function(){this.forceCompositionEnd()},il.prototype.reset=function(){this.forceCompositionEnd()},il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},il.prototype.readFromDOMSoon=function(){var t=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(t.readDOMTimeout=null,t.composing){if(!t.composing.done)return;t.composing=null}t.updateFromDOM()},80))},il.prototype.updateFromDOM=function(){var t=this;!this.cm.isReadOnly()&&this.pollContent()||Fr(this.cm,function(){return Vn(t.cm)})},il.prototype.setUneditable=function(t){t.contentEditable="false"},il.prototype.onKeyPress=function(t){0==t.charCode||this.composing||(t.preventDefault(),this.cm.isReadOnly()||Br(this.cm,Us)(this.cm,String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),0))},il.prototype.readOnlyChanged=function(t){this.div.contentEditable=String("nocursor"!=t)},il.prototype.onContextMenu=function(){},il.prototype.resetPosition=function(){},il.prototype.needsContentAttribute=!0;var cl=function(t){this.cm=t,this.prevInput="",this.pollingFast=!1,this.polling=new K,this.hasSelection=!1,this.composing=null,this.resetting=!1};function ul(t,e){if(e=e?$(e):{},e.value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var i=L(z(t));e.autofocus=i==t||null!=t.getAttribute("autofocus")&&i==document.body}function n(){t.value=s.getValue()}var r;if(t.form&&(bt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var a=t.form;r=a.submit;try{var o=a.submit=function(){n(),a.submit=r,a.submit(),a.submit=o}}catch(l){}}e.finishInit=function(i){i.save=n,i.getTextArea=function(){return t},i.toTextArea=function(){i.toTextArea=isNaN,n(),t.parentNode.removeChild(i.getWrapperElement()),t.style.display="",t.form&&(_t(t.form,"submit",n),e.leaveSubmitMethodAlone||"function"!=typeof t.form.submit||(t.form.submit=r))}},t.style.display="none";var s=Vs(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return s}function dl(t){t.off=_t,t.on=bt,t.wheelEventPixels=oa,t.Doc=To,t.splitLines=Ot,t.countColumn=H,t.findColumn=Z,t.isWordChar=ot,t.Pass=U,t.signal=wt,t.Line=hi,t.changeEnd=ha,t.scrollbarModel=Sr,t.Pos=ce,t.cmpPos=ue,t.modes=Ht,t.mimeModes=Kt,t.resolveMode=Ut,t.getMode=Gt,t.modeExtensions=jt,t.extendMode=qt,t.copyState=Zt,t.startState=Qt,t.innerMode=Jt,t.commands=es,t.keyMap=$o,t.keyName=Go,t.isModifierKey=Xo,t.lookupKey=Yo,t.normalizeKeyMap=Ko,t.StringStream=te,t.SharedTextMarker=_o,t.TextMarker=bo,t.LineWidget=vo,t.e_preventDefault=Tt,t.e_stopPropagation=Mt,t.e_stop=Et,t.addClass=R,t.contains=P,t.rmClass=T,t.keyNames=Oo}cl.prototype.init=function(t){var e=this,i=this,n=this.cm;this.createField(t);var r=this.textarea;function a(t){if(!Ct(n,t)){if(n.somethingSelected())Xs({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var e=qs(n);Xs({lineWise:!0,text:e.text}),"cut"==t.type?n.setSelections(e.ranges,null,G):(i.prevInput="",r.value=e.text.join("\n"),B(r))}"cut"==t.type&&(n.state.cutIncoming=+new Date)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),g&&(r.style.width="0px"),bt(r,"input",function(){o&&s>=9&&e.hasSelection&&(e.hasSelection=null),i.poll()}),bt(r,"paste",function(t){Ct(n,t)||Gs(t,n)||(n.state.pasteIncoming=+new Date,i.fastPoll())}),bt(r,"cut",a),bt(r,"copy",a),bt(t.scroller,"paste",function(e){if(!Ui(t,e)&&!Ct(n,e)){if(!r.dispatchEvent)return n.state.pasteIncoming=+new Date,void i.focus();var a=new Event("paste");a.clipboardData=e.clipboardData,r.dispatchEvent(a)}}),bt(t.lineSpace,"selectstart",function(e){Ui(t,e)||Tt(e)}),bt(r,"compositionstart",function(){var t=n.getCursor("from");i.composing&&i.composing.range.clear(),i.composing={start:t,range:n.markText(t,n.getCursor("to"),{className:"CodeMirror-composing"})}}),bt(r,"compositionend",function(){i.composing&&(i.poll(),i.composing.range.clear(),i.composing=null)})},cl.prototype.createField=function(t){this.wrapper=Js(),this.textarea=this.wrapper.firstChild;var e=this.cm.options;Zs(this.textarea,e.spellcheck,e.autocorrect,e.autocapitalize)},cl.prototype.screenReaderLabelChanged=function(t){t?this.textarea.setAttribute("aria-label",t):this.textarea.removeAttribute("aria-label")},cl.prototype.prepareSelection=function(){var t=this.cm,e=t.display,i=t.doc,n=Gn(t);if(t.options.moveInputWithCursor){var r=Cn(t,i.sel.primary().head,"div"),a=e.wrapper.getBoundingClientRect(),o=e.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(e.wrapper.clientHeight-10,r.top+o.top-a.top)),n.teLeft=Math.max(0,Math.min(e.wrapper.clientWidth-10,r.left+o.left-a.left))}return n},cl.prototype.showSelection=function(t){var e=this.cm,i=e.display;I(i.cursorDiv,t.cursors),I(i.selectionDiv,t.selection),null!=t.teTop&&(this.wrapper.style.top=t.teTop+"px",this.wrapper.style.left=t.teLeft+"px")},cl.prototype.reset=function(t){if(!(this.contextMenuPending||this.composing&&t)){var e=this.cm;if(this.resetting=!0,e.somethingSelected()){this.prevInput="";var i=e.getSelection();this.textarea.value=i,e.state.focused&&B(this.textarea),o&&s>=9&&(this.hasSelection=i)}else t||(this.prevInput=this.textarea.value="",o&&s>=9&&(this.hasSelection=null));this.resetting=!1}},cl.prototype.getField=function(){return this.textarea},cl.prototype.supportsTouch=function(){return!1},cl.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||L(z(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(t){}},cl.prototype.blur=function(){this.textarea.blur()},cl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},cl.prototype.receivedFocus=function(){this.slowPoll()},cl.prototype.slowPoll=function(){var t=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){t.poll(),t.cm.state.focused&&t.slowPoll()})},cl.prototype.fastPoll=function(){var t=!1,e=this;function i(){var n=e.poll();n||t?(e.pollingFast=!1,e.slowPoll()):(t=!0,e.polling.set(60,i))}e.pollingFast=!0,e.polling.set(20,i)},cl.prototype.poll=function(){var t=this,e=this.cm,i=this.textarea,n=this.prevInput;if(this.contextMenuPending||this.resetting||!e.state.focused||zt(i)&&!n&&!this.composing||e.isReadOnly()||e.options.disableInput||e.state.keySeq)return!1;var r=i.value;if(r==n&&!e.somethingSelected())return!1;if(o&&s>=9&&this.hasSelection===r||b&&/[\uf700-\uf7ff]/.test(r))return e.display.input.reset(),!1;if(e.doc.sel==e.display.selForContextMenu){var a=r.charCodeAt(0);if(8203!=a||n||(n="​"),8666==a)return this.reset(),this.cm.execCommand("undo")}var l=0,c=Math.min(n.length,r.length);while(l1e3||r.indexOf("\n")>-1?i.value=t.prevInput="":t.prevInput=r,t.composing&&(t.composing.range.clear(),t.composing.range=e.markText(t.composing.start,e.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},cl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},cl.prototype.onKeyPress=function(){o&&s>=9&&(this.hasSelection=null),this.fastPoll()},cl.prototype.onContextMenu=function(t){var e=this,i=e.cm,n=i.display,r=e.textarea;e.contextMenuPending&&e.contextMenuPending();var a=zn(i,t),c=n.scroller.scrollTop;if(a&&!h){var u=i.options.resetSelectionOnContextMenu;u&&-1==i.doc.sel.contains(a)&&Br(i,Ya)(i.doc,da(a),G);var d,p=r.style.cssText,f=e.wrapper.style.cssText,v=e.wrapper.offsetParent.getBoundingClientRect();if(e.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(t.clientY-v.top-5)+"px; left: "+(t.clientX-v.left-5)+"px;\n z-index: 1000; background: "+(o?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(d=r.ownerDocument.defaultView.scrollY),n.input.focus(),l&&r.ownerDocument.defaultView.scrollTo(null,d),n.input.reset(),i.somethingSelected()||(r.value=e.prevInput=" "),e.contextMenuPending=y,n.selForContextMenu=i.doc.sel,clearTimeout(n.detectingSelectAll),o&&s>=9&&m(),S){Et(t);var g=function(){_t(window,"mouseup",g),setTimeout(y,20)};bt(window,"mouseup",g)}else setTimeout(y,50)}function m(){if(null!=r.selectionStart){var t=i.somethingSelected(),a="​"+(t?r.value:"");r.value="⇚",r.value=a,e.prevInput=t?"":"​",r.selectionStart=1,r.selectionEnd=a.length,n.selForContextMenu=i.doc.sel}}function y(){if(e.contextMenuPending==y&&(e.contextMenuPending=!1,e.wrapper.style.cssText=f,r.style.cssText=p,o&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=c),null!=r.selectionStart)){(!o||o&&s<9)&&m();var t=0,a=function(){n.selForContextMenu==i.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==e.prevInput?Br(i,Qa)(i):t++<10?n.detectingSelectAll=setTimeout(a,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(a,200)}}},cl.prototype.readOnlyChanged=function(t){t||this.reset(),this.textarea.disabled="nocursor"==t,this.textarea.readOnly=!!t},cl.prototype.setUneditable=function(){},cl.prototype.needsContentAttribute=!1,Os(Vs),Qs(Vs);var hl="iter insert remove copy getEditor constructor".split(" ");for(var pl in To.prototype)To.prototype.hasOwnProperty(pl)&&Y(hl,pl)<0&&(Vs.prototype[pl]=function(t){return function(){return t.apply(this.doc,arguments)}}(To.prototype[pl]));return At(To),Vs.inputStyles={textarea:cl,contenteditable:il},Vs.defineMode=function(t){Vs.defaults.mode||"null"==t||(Vs.defaults.mode=t),Yt.apply(this,arguments)},Vs.defineMIME=Xt,Vs.defineMode("null",function(){return{token:function(t){return t.skipToEnd()}}}),Vs.defineMIME("text/plain","null"),Vs.defineExtension=function(t,e){Vs.prototype[t]=e},Vs.defineDocExtension=function(t,e){To.prototype[t]=e},Vs.fromTextArea=ul,dl(Vs),Vs.version="5.65.21",Vs})},74806:function(t,e,i){(function(t){t(i(15237))})(function(t){"use strict";function e(t){return new RegExp("^(("+t.join(")|(")+"))\\b")}var i=e(["and","or","not","is"]),n=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in","False","True"],r=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];function a(t){return t.scopes[t.scopes.length-1]}t.registerHelper("hintWords","python",n.concat(r).concat(["exec","print"])),t.defineMode("python",function(o,s){for(var l="error",c=s.delimiters||s.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/,u=[s.singleOperators,s.doubleOperators,s.doubleDelimiters,s.tripleDelimiters,s.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/],d=0;dn?S(e):r0&&A(t,e)&&(o+=" "+l),o}return _(t,e)}function _(t,e,n){if(t.eatSpace())return null;if(!n&&t.match(/^#.*/))return"comment";if(t.match(/^[0-9\.]/,!1)){var r=!1;if(t.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)&&(r=!0),t.match(/^[\d_]+\.\d*/)&&(r=!0),t.match(/^\.\d+/)&&(r=!0),r)return t.eat(/J/i),"number";var a=!1;if(t.match(/^0x[0-9a-f_]+/i)&&(a=!0),t.match(/^0b[01_]+/i)&&(a=!0),t.match(/^0o[0-7_]+/i)&&(a=!0),t.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)&&(t.eat(/J/i),a=!0),t.match(/^0(?![\dx])/i)&&(a=!0),a)return t.eat(/L/i),"number"}if(t.match(m)){var o=-1!==t.current().toLowerCase().indexOf("f");return o?(e.tokenize=w(t.current(),e.tokenize),e.tokenize(t,e)):(e.tokenize=C(t.current(),e.tokenize),e.tokenize(t,e))}for(var s=0;s=0)t=t.substr(1);var i=1==t.length,n="string";function r(t){return function(e,i){var n=_(e,i,!0);return"punctuation"==n&&("{"==e.current()?i.tokenize=r(t+1):"}"==e.current()&&(i.tokenize=t>1?r(t-1):a)),n}}function a(a,o){while(!a.eol())if(a.eatWhile(/[^'"\{\}\\]/),a.eat("\\")){if(a.next(),i&&a.eol())return n}else{if(a.match(t))return o.tokenize=e,n;if(a.match("{{"))return n;if(a.match("{",!1))return o.tokenize=r(0),a.current()?n:o.tokenize(a,o);if(a.match("}}"))return n;if(a.match("}"))return l;a.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;o.tokenize=e}return n}return a.isString=!0,a}function C(t,e){while("rubf".indexOf(t.charAt(0).toLowerCase())>=0)t=t.substr(1);var i=1==t.length,n="string";function r(r,a){while(!r.eol())if(r.eatWhile(/[^'"\\]/),r.eat("\\")){if(r.next(),i&&r.eol())return n}else{if(r.match(t))return a.tokenize=e,n;r.eat(/['"]/)}if(i){if(s.singleLineStringErrors)return l;a.tokenize=e}return n}return r.isString=!0,r}function S(t){while("py"!=a(t).type)t.scopes.pop();t.scopes.push({offset:a(t).offset+o.indentUnit,type:"py",align:null})}function k(t,e,i){var n=t.match(/^[\s\[\{\(]*(?:#|$)/,!1)?null:t.column()+1;e.scopes.push({offset:e.indent+h,type:i,align:n})}function A(t,e){var i=t.indentation();while(e.scopes.length>1&&a(e).offset>i){if("py"!=a(e).type)return!0;e.scopes.pop()}return a(e).offset!=i}function T(t,e){t.sol()&&(e.beginningOfLine=!0,e.dedent=!1);var i=e.tokenize(t,e),n=t.current();if(e.beginningOfLine&&"@"==n)return t.match(g,!1)?"meta":v?"operator":l;if(/\S/.test(n)&&(e.beginningOfLine=!1),"variable"!=i&&"builtin"!=i||"meta"!=e.lastToken||(i="meta"),"pass"!=n&&"return"!=n||(e.dedent=!0),"lambda"==n&&(e.lambda=!0),":"==n&&!e.lambda&&"py"==a(e).type&&t.match(/^\s*(?:#|$)/,!1)&&S(e),1==n.length&&!/string|comment/.test(i)){var r="[({".indexOf(n);if(-1!=r&&k(t,e,"])}".slice(r,r+1)),r="])}".indexOf(n),-1!=r){if(a(e).type!=n)return l;e.indent=e.scopes.pop().offset-h}}return e.dedent&&t.eol()&&"py"==a(e).type&&e.scopes.length>1&&e.scopes.pop(),i}var M={startState:function(t){return{tokenize:x,scopes:[{offset:t||0,type:"py",align:null}],indent:t||0,lastToken:null,lambda:!1,dedent:0}},token:function(t,e){var i=e.errorToken;i&&(e.errorToken=!1);var n=T(t,e);return n&&"comment"!=n&&(e.lastToken="keyword"==n||"punctuation"==n?t.current():n),"punctuation"==n&&(n=null),t.eol()&&e.lambda&&(e.lambda=!1),i?n+" "+l:n},indent:function(e,i){if(e.tokenize!=x)return e.tokenize.isString?t.Pass:0;var n=a(e),r=n.type==i.charAt(0)||"py"==n.type&&!e.dedent&&/^(else:|elif |except |finally:)/.test(i);return null!=n.align?n.align-(r?1:0):n.offset-(r?h:0)},electricInput:/^\s*([\}\]\)]|else:|elif |except |finally:)$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return M}),t.defineMIME("text/x-python","python");var o=function(t){return t.split(" ")};t.defineMIME("text/x-cython",{name:"python",extra_keywords:o("by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE")})})},40955:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo,a=[],o=[],s=[],l=[],c=[],u=[],d=[],h=[],p=[],f=[];(function(){for(var t=[],e=0;e<256;e++)t[e]=e<128?e<<1:e<<1^283;var i=0,n=0;for(e=0;e<256;e++){var r=n^n<<1^n<<2^n<<3^n<<4;r=r>>>8^255&r^99,a[i]=r,o[r]=i;var v=t[i],g=t[v],m=t[g],y=257*t[r]^16843008*r;s[i]=y<<24|y>>>8,l[i]=y<<16|y>>>16,c[i]=y<<8|y>>>24,u[i]=y;y=16843009*m^65537*g^257*v^16843008*i;d[r]=y<<24|y>>>8,h[r]=y<<16|y>>>16,p[r]=y<<8|y>>>24,f[r]=y,i?(i=v^t[t[t[m^v]]],n^=t[t[n]]):i=n=1}})();var v=[0,1,2,4,8,16,32,64,128,27,54],g=r.AES=n.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var t=this._keyPriorReset=this._key,e=t.words,i=t.sigBytes/4,n=this._nRounds=i+6,r=4*(n+1),o=this._keySchedule=[],s=0;s6&&s%i==4&&(u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u]):(u=u<<8|u>>>24,u=a[u>>>24]<<24|a[u>>>16&255]<<16|a[u>>>8&255]<<8|a[255&u],u^=v[s/i|0]<<24),o[s]=o[s-i]^u);for(var l=this._invKeySchedule=[],c=0;c>>24]]^h[a[u>>>16&255]]^p[a[u>>>8&255]]^f[a[255&u]]}}},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._keySchedule,s,l,c,u,a)},decryptBlock:function(t,e){var i=t[e+1];t[e+1]=t[e+3],t[e+3]=i,this._doCryptBlock(t,e,this._invKeySchedule,d,h,p,f,o);i=t[e+1];t[e+1]=t[e+3],t[e+3]=i},_doCryptBlock:function(t,e,i,n,r,a,o,s){for(var l=this._nRounds,c=t[e]^i[0],u=t[e+1]^i[1],d=t[e+2]^i[2],h=t[e+3]^i[3],p=4,f=1;f>>24]^r[u>>>16&255]^a[d>>>8&255]^o[255&h]^i[p++],g=n[u>>>24]^r[d>>>16&255]^a[h>>>8&255]^o[255&c]^i[p++],m=n[d>>>24]^r[h>>>16&255]^a[c>>>8&255]^o[255&u]^i[p++],y=n[h>>>24]^r[c>>>16&255]^a[u>>>8&255]^o[255&d]^i[p++];c=v,u=g,d=m,h=y}v=(s[c>>>24]<<24|s[u>>>16&255]<<16|s[d>>>8&255]<<8|s[255&h])^i[p++],g=(s[u>>>24]<<24|s[d>>>16&255]<<16|s[h>>>8&255]<<8|s[255&c])^i[p++],m=(s[d>>>24]<<24|s[h>>>16&255]<<16|s[c>>>8&255]<<8|s[255&u])^i[p++],y=(s[h>>>24]<<24|s[c>>>16&255]<<16|s[u>>>8&255]<<8|s[255&d])^i[p++];t[e]=v,t[e+1]=g,t[e+2]=m,t[e+3]=y},keySize:8});e.AES=n._createHelper(g)}(),t.AES})},43128:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.BlockCipher,r=e.algo;const a=16,o=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],s=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var l={pbox:[],sbox:[]};function c(t,e){let i=e>>24&255,n=e>>16&255,r=e>>8&255,a=255&e,o=t.sbox[0][i]+t.sbox[1][n];return o^=t.sbox[2][r],o+=t.sbox[3][a],o}function u(t,e,i){let n,r=e,o=i;for(let s=0;s1;--s)r^=t.pbox[s],o=c(t,r)^o,n=r,r=o,o=n;return n=r,r=o,o=n,o^=t.pbox[1],r^=t.pbox[0],{left:r,right:o}}function h(t,e,i){for(let a=0;a<4;a++){t.sbox[a]=[];for(let e=0;e<256;e++)t.sbox[a][e]=s[a][e]}let n=0;for(let s=0;s=i&&(n=0);let r=0,l=0,c=0;for(let o=0;o>>2];t.sigBytes-=e}},m=(n.BlockCipher=d.extend({cfg:d.cfg.extend({mode:f,padding:g}),reset:function(){var t;d.reset.call(this);var e=this.cfg,i=e.iv,n=e.mode;this._xformMode==this._ENC_XFORM_MODE?t=n.createEncryptor:(t=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==t?this._mode.init(this,i&&i.words):(this._mode=t.call(n,this,i&&i.words),this._mode.__creator=t)},_doProcessBlock:function(t,e){this._mode.processBlock(t,e)},_doFinalize:function(){var t,e=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(e.pad(this._data,this.blockSize),t=this._process(!0)):(t=this._process(!0),e.unpad(t)),t},blockSize:4}),n.CipherParams=r.extend({init:function(t){this.mixIn(t)},toString:function(t){return(t||this.formatter).stringify(this)}})),y=i.format={},b=y.OpenSSL={stringify:function(t){var e,i=t.ciphertext,n=t.salt;return e=n?a.create([1398893684,1701076831]).concat(n).concat(i):i,e.toString(l)},parse:function(t){var e,i=l.parse(t),n=i.words;return 1398893684==n[0]&&1701076831==n[1]&&(e=a.create(n.slice(2,4)),n.splice(0,4),i.sigBytes-=16),m.create({ciphertext:i,salt:e})}},x=n.SerializableCipher=r.extend({cfg:r.extend({format:b}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=t.createEncryptor(i,n),a=r.finalize(e),o=r.cfg;return m.create({ciphertext:a,key:i,iv:o.iv,algorithm:t,mode:o.mode,padding:o.padding,blockSize:t.blockSize,formatter:n.format})},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=t.createDecryptor(i,n).finalize(e.ciphertext);return r},_parse:function(t,e){return"string"==typeof t?e.parse(t,this):t}}),_=i.kdf={},w=_.OpenSSL={execute:function(t,e,i,n,r){if(n||(n=a.random(8)),r)o=u.create({keySize:e+i,hasher:r}).compute(t,n);else var o=u.create({keySize:e+i}).compute(t,n);var s=a.create(o.words.slice(e),4*i);return o.sigBytes=4*e,m.create({key:o,iv:s,salt:n})}},C=n.PasswordBasedCipher=x.extend({cfg:x.cfg.extend({kdf:w}),encrypt:function(t,e,i,n){n=this.cfg.extend(n);var r=n.kdf.execute(i,t.keySize,t.ivSize,n.salt,n.hasher);n.iv=r.iv;var a=x.encrypt.call(this,t,e,r.key,n);return a.mixIn(r),a},decrypt:function(t,e,i,n){n=this.cfg.extend(n),e=this._parse(e,n.format);var r=n.kdf.execute(i,t.keySize,t.ivSize,e.salt,n.hasher);n.iv=r.iv;var a=x.decrypt.call(this,t,e,r.key,n);return a}})}()})},19021:function(t,e,i){(function(e,i){t.exports=i()})(0,function(){var t=t||function(t,e){var n;if("undefined"!==typeof window&&window.crypto&&(n=window.crypto),"undefined"!==typeof self&&self.crypto&&(n=self.crypto),"undefined"!==typeof globalThis&&globalThis.crypto&&(n=globalThis.crypto),!n&&"undefined"!==typeof window&&window.msCrypto&&(n=window.msCrypto),!n&&"undefined"!==typeof i.g&&i.g.crypto&&(n=i.g.crypto),!n)try{n=i(50477)}catch(g){}var r=function(){if(n){if("function"===typeof n.getRandomValues)try{return n.getRandomValues(new Uint32Array(1))[0]}catch(g){}if("function"===typeof n.randomBytes)try{return n.randomBytes(4).readInt32LE()}catch(g){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function t(){}return function(e){var i;return t.prototype=e,i=new t,t.prototype=null,i}}(),o={},s=o.lib={},l=s.Base=function(){return{extend:function(t){var e=a(this);return t&&e.mixIn(t),e.hasOwnProperty("init")&&this.init!==e.init||(e.init=function(){e.$super.init.apply(this,arguments)}),e.init.prototype=e,e.$super=this,e},create:function(){var t=this.extend();return t.init.apply(t,arguments),t},init:function(){},mixIn:function(t){for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);t.hasOwnProperty("toString")&&(this.toString=t.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),c=s.WordArray=l.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:4*t.length},toString:function(t){return(t||d).stringify(this)},concat:function(t){var e=this.words,i=t.words,n=this.sigBytes,r=t.sigBytes;if(this.clamp(),n%4)for(var a=0;a>>2]>>>24-a%4*8&255;e[n+a>>>2]|=o<<24-(n+a)%4*8}else for(var s=0;s>>2]=i[s>>>2];return this.sigBytes+=r,this},clamp:function(){var e=this.words,i=this.sigBytes;e[i>>>2]&=4294967295<<32-i%4*8,e.length=t.ceil(i/4)},clone:function(){var t=l.clone.call(this);return t.words=this.words.slice(0),t},random:function(t){for(var e=[],i=0;i>>2]>>>24-r%4*8&255;n.push((a>>>4).toString(16)),n.push((15&a).toString(16))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>3]|=parseInt(t.substr(n,2),16)<<24-n%8*4;return new c.init(i,e/2)}},h=u.Latin1={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>24-r%4*8&255;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],n=0;n>>2]|=(255&t.charCodeAt(n))<<24-n%4*8;return new c.init(i,e)}},p=u.Utf8={stringify:function(t){try{return decodeURIComponent(escape(h.stringify(t)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(t){return h.parse(unescape(encodeURIComponent(t)))}},f=s.BufferedBlockAlgorithm=l.extend({reset:function(){this._data=new c.init,this._nDataBytes=0},_append:function(t){"string"==typeof t&&(t=p.parse(t)),this._data.concat(t),this._nDataBytes+=t.sigBytes},_process:function(e){var i,n=this._data,r=n.words,a=n.sigBytes,o=this.blockSize,s=4*o,l=a/s;l=e?t.ceil(l):t.max((0|l)-this._minBufferSize,0);var u=l*o,d=t.min(4*u,a);if(u){for(var h=0;h>>2]>>>24-a%4*8&255,s=e[a+1>>>2]>>>24-(a+1)%4*8&255,l=e[a+2>>>2]>>>24-(a+2)%4*8&255,c=o<<16|s<<8|l,u=0;u<4&&a+.75*u>>6*(3-u)&63));var d=n.charAt(64);if(d)while(r.length%4)r.push(d);return r.join("")},parse:function(t){var e=t.length,i=this._map,n=this._reverseMap;if(!n){n=this._reverseMap=[];for(var r=0;r>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64})},64725:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Base64url={stringify:function(t,e){void 0===e&&(e=!0);var i=t.words,n=t.sigBytes,r=e?this._safe_map:this._map;t.clamp();for(var a=[],o=0;o>>2]>>>24-o%4*8&255,l=i[o+1>>>2]>>>24-(o+1)%4*8&255,c=i[o+2>>>2]>>>24-(o+2)%4*8&255,u=s<<16|l<<8|c,d=0;d<4&&o+.75*d>>6*(3-d)&63));var h=r.charAt(64);if(h)while(a.length%4)a.push(h);return a.join("")},parse:function(t,e){void 0===e&&(e=!0);var i=t.length,n=e?this._safe_map:this._map,r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var o=0;o>>6-o%4*2,c=s|l;r[a>>>2]|=c<<24-a%4*8,a++}return n.create(r,a)}}(),t.enc.Base64url})},45503:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.enc;r.Utf16=r.Utf16BE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535;n.push(String.fromCharCode(a))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=t.charCodeAt(r)<<16-r%2*16;return n.create(i,2*e)}};function a(t){return t<<8&4278255360|t>>>8&16711935}r.Utf16LE={stringify:function(t){for(var e=t.words,i=t.sigBytes,n=[],r=0;r>>2]>>>16-r%4*8&65535);n.push(String.fromCharCode(o))}return n.join("")},parse:function(t){for(var e=t.length,i=[],r=0;r>>1]|=a(t.charCodeAt(r)<<16-r%2*16);return n.create(i,2*e)}}}(),t.enc.Utf16})},39506:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(45471),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.MD5,s=a.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i,n=this.cfg,a=n.hasher.create(),o=r.create(),s=o.words,l=n.keySize,c=n.iterations;while(s.lengthn&&(e=t.finalize(e)),e.clamp();for(var r=this._oKey=e.clone(),o=this._iKey=e.clone(),s=r.words,l=o.words,c=0;c>>2]|=t[n]<<24-n%4*8;r.call(this,i,e)}else r.apply(this,arguments)};a.prototype=n}}(),t.lib.WordArray})},84636:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[];(function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0})();var l=o.MD5=a.extend({_doReset:function(){this._hash=new r.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a=this._hash.words,o=t[e+0],l=t[e+1],p=t[e+2],f=t[e+3],v=t[e+4],g=t[e+5],m=t[e+6],y=t[e+7],b=t[e+8],x=t[e+9],_=t[e+10],w=t[e+11],C=t[e+12],S=t[e+13],k=t[e+14],A=t[e+15],T=a[0],M=a[1],I=a[2],E=a[3];T=c(T,M,I,E,o,7,s[0]),E=c(E,T,M,I,l,12,s[1]),I=c(I,E,T,M,p,17,s[2]),M=c(M,I,E,T,f,22,s[3]),T=c(T,M,I,E,v,7,s[4]),E=c(E,T,M,I,g,12,s[5]),I=c(I,E,T,M,m,17,s[6]),M=c(M,I,E,T,y,22,s[7]),T=c(T,M,I,E,b,7,s[8]),E=c(E,T,M,I,x,12,s[9]),I=c(I,E,T,M,_,17,s[10]),M=c(M,I,E,T,w,22,s[11]),T=c(T,M,I,E,C,7,s[12]),E=c(E,T,M,I,S,12,s[13]),I=c(I,E,T,M,k,17,s[14]),M=c(M,I,E,T,A,22,s[15]),T=u(T,M,I,E,l,5,s[16]),E=u(E,T,M,I,m,9,s[17]),I=u(I,E,T,M,w,14,s[18]),M=u(M,I,E,T,o,20,s[19]),T=u(T,M,I,E,g,5,s[20]),E=u(E,T,M,I,_,9,s[21]),I=u(I,E,T,M,A,14,s[22]),M=u(M,I,E,T,v,20,s[23]),T=u(T,M,I,E,x,5,s[24]),E=u(E,T,M,I,k,9,s[25]),I=u(I,E,T,M,f,14,s[26]),M=u(M,I,E,T,b,20,s[27]),T=u(T,M,I,E,S,5,s[28]),E=u(E,T,M,I,p,9,s[29]),I=u(I,E,T,M,y,14,s[30]),M=u(M,I,E,T,C,20,s[31]),T=d(T,M,I,E,g,4,s[32]),E=d(E,T,M,I,b,11,s[33]),I=d(I,E,T,M,w,16,s[34]),M=d(M,I,E,T,k,23,s[35]),T=d(T,M,I,E,l,4,s[36]),E=d(E,T,M,I,v,11,s[37]),I=d(I,E,T,M,y,16,s[38]),M=d(M,I,E,T,_,23,s[39]),T=d(T,M,I,E,S,4,s[40]),E=d(E,T,M,I,o,11,s[41]),I=d(I,E,T,M,f,16,s[42]),M=d(M,I,E,T,m,23,s[43]),T=d(T,M,I,E,x,4,s[44]),E=d(E,T,M,I,C,11,s[45]),I=d(I,E,T,M,A,16,s[46]),M=d(M,I,E,T,p,23,s[47]),T=h(T,M,I,E,o,6,s[48]),E=h(E,T,M,I,y,10,s[49]),I=h(I,E,T,M,k,15,s[50]),M=h(M,I,E,T,g,21,s[51]),T=h(T,M,I,E,C,6,s[52]),E=h(E,T,M,I,f,10,s[53]),I=h(I,E,T,M,_,15,s[54]),M=h(M,I,E,T,l,21,s[55]),T=h(T,M,I,E,b,6,s[56]),E=h(E,T,M,I,A,10,s[57]),I=h(I,E,T,M,m,15,s[58]),M=h(M,I,E,T,S,21,s[59]),T=h(T,M,I,E,v,6,s[60]),E=h(E,T,M,I,w,10,s[61]),I=h(I,E,T,M,p,15,s[62]),M=h(M,I,E,T,x,21,s[63]),a[0]=a[0]+T|0,a[1]=a[1]+M|0,a[2]=a[2]+I|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;i[r>>>5]|=128<<24-r%32;var a=e.floor(n/4294967296),o=n;i[15+(r+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),i[14+(r+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),t.sigBytes=4*(i.length+1),this._process();for(var s=this._hash,l=s.words,c=0;c<4;c++){var u=l[c];l[c]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}return s},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});function c(t,e,i,n,r,a,o){var s=t+(e&i|~e&n)+r+o;return(s<>>32-a)+e}function u(t,e,i,n,r,a,o){var s=t+(e&n|i&~n)+r+o;return(s<>>32-a)+e}function d(t,e,i,n,r,a,o){var s=t+(e^i^n)+r+o;return(s<>>32-a)+e}function h(t,e,i,n,r,a,o){var s=t+(i^(e|~n))+r+o;return(s<>>32-a)+e}i.MD5=a._createHelper(l),i.HmacMD5=a._createHmacHelper(l)}(Math),t.MD5})},82169:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.mode.CFB=function(){var e=t.lib.BlockCipherMode.extend();function i(t,e,i,n){var r,a=this._iv;a?(r=a.slice(0),this._iv=void 0):r=this._prevBlock,n.encryptBlock(r,0);for(var o=0;o>24&255)){var e=t>>16&255,i=t>>8&255,n=255&t;255===e?(e=0,255===i?(i=0,255===n?n=0:++n):++i):++e,t=0,t+=e<<16,t+=i<<8,t+=n}else t+=1<<24;return t}function n(t){return 0===(t[0]=i(t[0]))&&(t[1]=i(t[1])),t}var r=e.Encryptor=e.extend({processBlock:function(t,e){var i=this._cipher,r=i.blockSize,a=this._iv,o=this._counter;a&&(o=this._counter=a.slice(0),this._iv=void 0),n(o);var s=o.slice(0);i.encryptBlock(s,0);for(var l=0;l>>2]|=r<<24-a%4*8,t.sigBytes+=r},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Ansix923})},54905:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso10126={pad:function(e,i){var n=4*i,r=n-e.sigBytes%n;e.concat(t.lib.WordArray.random(r-1)).concat(t.lib.WordArray.create([r<<24],1))},unpad:function(t){var e=255&t.words[t.sigBytes-1>>>2];t.sigBytes-=e}},t.pad.Iso10126})},10482:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.Iso97971={pad:function(e,i){e.concat(t.lib.WordArray.create([2147483648],1)),t.pad.ZeroPadding.pad(e,i)},unpad:function(e){t.pad.ZeroPadding.unpad(e),e.sigBytes--}},t.pad.Iso97971})},58124:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.NoPadding={pad:function(){},unpad:function(){}},t.pad.NoPadding})},52155:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(57165))})(0,function(t){return t.pad.ZeroPadding={pad:function(t,e){var i=4*e;t.clamp(),t.sigBytes+=i-(t.sigBytes%i||i)},unpad:function(t){var e=t.words,i=t.sigBytes-1;for(i=t.sigBytes-1;i>=0;i--)if(e[i>>>2]>>>24-i%4*8&255){t.sigBytes=i+1;break}}},t.pad.ZeroPadding})},70019:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009),i(51025))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Base,r=i.WordArray,a=e.algo,o=a.SHA256,s=a.HMAC,l=a.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(t){this.cfg=this.cfg.extend(t)},compute:function(t,e){var i=this.cfg,n=s.create(i.hasher,t),a=r.create(),o=r.create([1]),l=a.words,c=o.words,u=i.keySize,d=i.iterations;while(l.length>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],n=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(var r=0;r<4;r++)c.call(this);for(r=0;r<8;r++)n[r]^=i[r+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;n[0]^=l,n[1]^=d,n[2]^=u,n[3]^=h,n[4]^=l,n[5]^=d,n[6]^=u,n[7]^=h;for(r=0;r<4;r++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.RabbitLegacy=n._createHelper(l)}(),t.RabbitLegacy})},96298:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=[],o=[],s=[],l=r.Rabbit=n.extend({_doReset:function(){for(var t=this._key.words,e=this.cfg.iv,i=0;i<4;i++)t[i]=16711935&(t[i]<<8|t[i]>>>24)|4278255360&(t[i]<<24|t[i]>>>8);var n=this._X=[t[0],t[3]<<16|t[2]>>>16,t[1],t[0]<<16|t[3]>>>16,t[2],t[1]<<16|t[0]>>>16,t[3],t[2]<<16|t[1]>>>16],r=this._C=[t[2]<<16|t[2]>>>16,4294901760&t[0]|65535&t[1],t[3]<<16|t[3]>>>16,4294901760&t[1]|65535&t[2],t[0]<<16|t[0]>>>16,4294901760&t[2]|65535&t[3],t[1]<<16|t[1]>>>16,4294901760&t[3]|65535&t[0]];this._b=0;for(i=0;i<4;i++)c.call(this);for(i=0;i<8;i++)r[i]^=n[i+4&7];if(e){var a=e.words,o=a[0],s=a[1],l=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),u=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),d=l>>>16|4294901760&u,h=u<<16|65535&l;r[0]^=l,r[1]^=d,r[2]^=u,r[3]^=h,r[4]^=l,r[5]^=d,r[6]^=u,r[7]^=h;for(i=0;i<4;i++)c.call(this)}},_doProcessBlock:function(t,e){var i=this._X;c.call(this),a[0]=i[0]^i[5]>>>16^i[3]<<16,a[1]=i[2]^i[7]>>>16^i[5]<<16,a[2]=i[4]^i[1]>>>16^i[7]<<16,a[3]=i[6]^i[3]>>>16^i[1]<<16;for(var n=0;n<4;n++)a[n]=16711935&(a[n]<<8|a[n]>>>24)|4278255360&(a[n]<<24|a[n]>>>8),t[e+n]^=a[n]},blockSize:4,ivSize:2});function c(){for(var t=this._X,e=this._C,i=0;i<8;i++)o[i]=e[i];e[0]=e[0]+1295307597+this._b|0,e[1]=e[1]+3545052371+(e[0]>>>0>>0?1:0)|0,e[2]=e[2]+886263092+(e[1]>>>0>>0?1:0)|0,e[3]=e[3]+1295307597+(e[2]>>>0>>0?1:0)|0,e[4]=e[4]+3545052371+(e[3]>>>0>>0?1:0)|0,e[5]=e[5]+886263092+(e[4]>>>0>>0?1:0)|0,e[6]=e[6]+1295307597+(e[5]>>>0>>0?1:0)|0,e[7]=e[7]+3545052371+(e[6]>>>0>>0?1:0)|0,this._b=e[7]>>>0>>0?1:0;for(i=0;i<8;i++){var n=t[i]+e[i],r=65535&n,a=n>>>16,l=((r*r>>>17)+r*a>>>15)+a*a,c=((4294901760&n)*n|0)+((65535&n)*n|0);s[i]=l^c}t[0]=s[0]+(s[7]<<16|s[7]>>>16)+(s[6]<<16|s[6]>>>16)|0,t[1]=s[1]+(s[0]<<8|s[0]>>>24)+s[7]|0,t[2]=s[2]+(s[1]<<16|s[1]>>>16)+(s[0]<<16|s[0]>>>16)|0,t[3]=s[3]+(s[2]<<8|s[2]>>>24)+s[1]|0,t[4]=s[4]+(s[3]<<16|s[3]>>>16)+(s[2]<<16|s[2]>>>16)|0,t[5]=s[5]+(s[4]<<8|s[4]>>>24)+s[3]|0,t[6]=s[6]+(s[5]<<16|s[5]>>>16)+(s[4]<<16|s[4]>>>16)|0,t[7]=s[7]+(s[6]<<8|s[6]>>>24)+s[5]|0}e.Rabbit=n._createHelper(l)}(),t.Rabbit})},77193:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.StreamCipher,r=e.algo,a=r.RC4=n.extend({_doReset:function(){for(var t=this._key,e=t.words,i=t.sigBytes,n=this._S=[],r=0;r<256;r++)n[r]=r;r=0;for(var a=0;r<256;r++){var o=r%i,s=e[o>>>2]>>>24-o%4*8&255;a=(a+n[r]+s)%256;var l=n[r];n[r]=n[a],n[a]=l}this._i=this._j=0},_doProcessBlock:function(t,e){t[e]^=o.call(this)},keySize:8,ivSize:0});function o(){for(var t=this._S,e=this._i,i=this._j,n=0,r=0;r<4;r++){e=(e+1)%256,i=(i+t[e])%256;var a=t[e];t[e]=t[i],t[i]=a,n|=t[(t[e]+t[i])%256]<<24-8*r}return this._i=e,this._j=i,n}e.RC4=n._createHelper(a);var s=r.RC4Drop=a.extend({cfg:a.cfg.extend({drop:192}),_doReset:function(){a._doReset.call(this);for(var t=this.cfg.drop;t>0;t--)o.call(this)}});e.RC4Drop=n._createHelper(s)}(),t.RC4})},78056:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){ -/** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. - - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=n.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),s=n.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),l=n.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),c=n.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),u=n.create([0,1518500249,1859775393,2400959708,2840853838]),d=n.create([1352829926,1548603684,1836072691,2053994217,0]),h=a.RIPEMD160=r.extend({_doReset:function(){this._hash=n.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=0;i<16;i++){var n=e+i,r=t[n];t[n]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8)}var a,h,b,x,_,w,C,S,k,A,T,M=this._hash.words,I=u.words,E=d.words,D=o.words,P=s.words,L=l.words,R=c.words;w=a=M[0],C=h=M[1],S=b=M[2],k=x=M[3],A=_=M[4];for(i=0;i<80;i+=1)T=a+t[e+D[i]]|0,T+=i<16?p(h,b,x)+I[0]:i<32?f(h,b,x)+I[1]:i<48?v(h,b,x)+I[2]:i<64?g(h,b,x)+I[3]:m(h,b,x)+I[4],T|=0,T=y(T,L[i]),T=T+_|0,a=_,_=x,x=y(b,10),b=h,h=T,T=w+t[e+P[i]]|0,T+=i<16?m(C,S,k)+E[0]:i<32?g(C,S,k)+E[1]:i<48?v(C,S,k)+E[2]:i<64?f(C,S,k)+E[3]:p(C,S,k)+E[4],T|=0,T=y(T,R[i]),T=T+A|0,w=A,A=k,k=y(S,10),S=C,C=T;T=M[1]+b+k|0,M[1]=M[2]+x+A|0,M[2]=M[3]+_+w|0,M[3]=M[4]+a+C|0,M[4]=M[0]+h+S|0,M[0]=T},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),t.sigBytes=4*(e.length+1),this._process();for(var r=this._hash,a=r.words,o=0;o<5;o++){var s=a[o];a[o]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}return r},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});function p(t,e,i){return t^e^i}function f(t,e,i){return t&e|~t&i}function v(t,e,i){return(t|~e)^i}function g(t,e,i){return t&i|e&~i}function m(t,e,i){return t^(e|~i)}function y(t,e){return t<>>32-e}e.RIPEMD160=r._createHelper(h),e.HmacRIPEMD160=r._createHmacHelper(h)}(Math),t.RIPEMD160})},45471:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.Hasher,a=e.algo,o=[],s=a.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],s=i[3],l=i[4],c=0;c<80;c++){if(c<16)o[c]=0|t[e+c];else{var u=o[c-3]^o[c-8]^o[c-14]^o[c-16];o[c]=u<<1|u>>>31}var d=(n<<5|n>>>27)+l+o[c];d+=c<20?1518500249+(r&a|~r&s):c<40?1859775393+(r^a^s):c<60?(r&a|r&s|a&s)-1894007588:(r^a^s)-899497514,l=s,s=a,a=r<<30|r>>>2,r=n,n=d}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+s|0,i[4]=i[4]+l|0},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;return e[n>>>5]|=128<<24-n%32,e[14+(n+64>>>9<<4)]=Math.floor(i/4294967296),e[15+(n+64>>>9<<4)]=i,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var t=r.clone.call(this);return t._hash=this._hash.clone(),t}});e.SHA1=r._createHelper(s),e.HmacSHA1=r._createHmacHelper(s)}(),t.SHA1})},36308:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(63009))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=e.algo,a=r.SHA256,o=r.SHA224=a.extend({_doReset:function(){this._hash=new n.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var t=a._doFinalize.call(this);return t.sigBytes-=4,t}});e.SHA224=a._createHelper(o),e.HmacSHA224=a._createHmacHelper(o)}(),t.SHA224})},63009:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.algo,s=[],l=[];(function(){function t(t){for(var i=e.sqrt(t),n=2;n<=i;n++)if(!(t%n))return!1;return!0}function i(t){return 4294967296*(t-(0|t))|0}var n=2,r=0;while(r<64)t(n)&&(r<8&&(s[r]=i(e.pow(n,.5))),l[r]=i(e.pow(n,1/3)),r++),n++})();var c=[],u=o.SHA256=a.extend({_doReset:function(){this._hash=new r.init(s.slice(0))},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],u=i[5],d=i[6],h=i[7],p=0;p<64;p++){if(p<16)c[p]=0|t[e+p];else{var f=c[p-15],v=(f<<25|f>>>7)^(f<<14|f>>>18)^f>>>3,g=c[p-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;c[p]=v+c[p-7]+m+c[p-16]}var y=s&u^~s&d,b=n&r^n&a^r&a,x=(n<<30|n>>>2)^(n<<19|n>>>13)^(n<<10|n>>>22),_=(s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25),w=h+_+y+l[p]+c[p],C=x+b;h=d,d=u,u=s,s=o+w|0,o=a,a=r,r=n,n=w+C|0}i[0]=i[0]+n|0,i[1]=i[1]+r|0,i[2]=i[2]+a|0,i[3]=i[3]+o|0,i[4]=i[4]+s|0,i[5]=i[5]+u|0,i[6]=i[6]+d|0,i[7]=i[7]+h|0},_doFinalize:function(){var t=this._data,i=t.words,n=8*this._nDataBytes,r=8*t.sigBytes;return i[r>>>5]|=128<<24-r%32,i[14+(r+64>>>9<<4)]=e.floor(n/4294967296),i[15+(r+64>>>9<<4)]=n,t.sigBytes=4*i.length,this._process(),this._hash},clone:function(){var t=a.clone.call(this);return t._hash=this._hash.clone(),t}});i.SHA256=a._createHelper(u),i.HmacSHA256=a._createHmacHelper(u)}(Math),t.SHA256})},45953:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.WordArray,a=n.Hasher,o=i.x64,s=o.Word,l=i.algo,c=[],u=[],d=[];(function(){for(var t=1,e=0,i=0;i<24;i++){c[t+5*e]=(i+1)*(i+2)/2%64;var n=e%5,r=(2*t+3*e)%5;t=n,e=r}for(t=0;t<5;t++)for(e=0;e<5;e++)u[t+5*e]=e+(2*t+3*e)%5*5;for(var a=1,o=0;o<24;o++){for(var l=0,h=0,p=0;p<7;p++){if(1&a){var f=(1<>>24)|4278255360&(a<<24|a>>>8),o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);var s=i[r];s.high^=o,s.low^=a}for(var l=0;l<24;l++){for(var p=0;p<5;p++){for(var f=0,v=0,g=0;g<5;g++){s=i[p+5*g];f^=s.high,v^=s.low}var m=h[p];m.high=f,m.low=v}for(p=0;p<5;p++){var y=h[(p+4)%5],b=h[(p+1)%5],x=b.high,_=b.low;for(f=y.high^(x<<1|_>>>31),v=y.low^(_<<1|x>>>31),g=0;g<5;g++){s=i[p+5*g];s.high^=f,s.low^=v}}for(var w=1;w<25;w++){s=i[w];var C=s.high,S=s.low,k=c[w];k<32?(f=C<>>32-k,v=S<>>32-k):(f=S<>>64-k,v=C<>>64-k);var A=h[u[w]];A.high=f,A.low=v}var T=h[0],M=i[0];T.high=M.high,T.low=M.low;for(p=0;p<5;p++)for(g=0;g<5;g++){w=p+5*g,s=i[w];var I=h[w],E=h[(p+1)%5+5*g],D=h[(p+2)%5+5*g];s.high=I.high^~E.high&D.high,s.low=I.low^~E.low&D.low}s=i[0];var P=d[l];s.high^=P.high,s.low^=P.low}},_doFinalize:function(){var t=this._data,i=t.words,n=(this._nDataBytes,8*t.sigBytes),a=32*this.blockSize;i[n>>>5]|=1<<24-n%32,i[(e.ceil((n+1)/a)*a>>>5)-1]|=128,t.sigBytes=4*i.length,this._process();for(var o=this._state,s=this.cfg.outputLength/8,l=s/8,c=[],u=0;u>>24)|4278255360&(h<<24|h>>>8),p=16711935&(p<<8|p>>>24)|4278255360&(p<<24|p>>>8),c.push(p),c.push(h)}return new r.init(c,s)},clone:function(){for(var t=a.clone.call(this),e=t._state=this._state.slice(0),i=0;i<25;i++)e[i]=e[i].clone();return t}});i.SHA3=a._createHelper(p),i.HmacSHA3=a._createHmacHelper(p)}(Math),t.SHA3})},89557:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240),i(81380))})(0,function(t){return function(){var e=t,i=e.x64,n=i.Word,r=i.WordArray,a=e.algo,o=a.SHA512,s=a.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var t=o._doFinalize.call(this);return t.sigBytes-=16,t}});e.SHA384=o._createHelper(s),e.HmacSHA384=o._createHmacHelper(s)}(),t.SHA384})},81380:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(43240))})(0,function(t){return function(){var e=t,i=e.lib,n=i.Hasher,r=e.x64,a=r.Word,o=r.WordArray,s=e.algo;function l(){return a.create.apply(a,arguments)}var c=[l(1116352408,3609767458),l(1899447441,602891725),l(3049323471,3964484399),l(3921009573,2173295548),l(961987163,4081628472),l(1508970993,3053834265),l(2453635748,2937671579),l(2870763221,3664609560),l(3624381080,2734883394),l(310598401,1164996542),l(607225278,1323610764),l(1426881987,3590304994),l(1925078388,4068182383),l(2162078206,991336113),l(2614888103,633803317),l(3248222580,3479774868),l(3835390401,2666613458),l(4022224774,944711139),l(264347078,2341262773),l(604807628,2007800933),l(770255983,1495990901),l(1249150122,1856431235),l(1555081692,3175218132),l(1996064986,2198950837),l(2554220882,3999719339),l(2821834349,766784016),l(2952996808,2566594879),l(3210313671,3203337956),l(3336571891,1034457026),l(3584528711,2466948901),l(113926993,3758326383),l(338241895,168717936),l(666307205,1188179964),l(773529912,1546045734),l(1294757372,1522805485),l(1396182291,2643833823),l(1695183700,2343527390),l(1986661051,1014477480),l(2177026350,1206759142),l(2456956037,344077627),l(2730485921,1290863460),l(2820302411,3158454273),l(3259730800,3505952657),l(3345764771,106217008),l(3516065817,3606008344),l(3600352804,1432725776),l(4094571909,1467031594),l(275423344,851169720),l(430227734,3100823752),l(506948616,1363258195),l(659060556,3750685593),l(883997877,3785050280),l(958139571,3318307427),l(1322822218,3812723403),l(1537002063,2003034995),l(1747873779,3602036899),l(1955562222,1575990012),l(2024104815,1125592928),l(2227730452,2716904306),l(2361852424,442776044),l(2428436474,593698344),l(2756734187,3733110249),l(3204031479,2999351573),l(3329325298,3815920427),l(3391569614,3928383900),l(3515267271,566280711),l(3940187606,3454069534),l(4118630271,4000239992),l(116418474,1914138554),l(174292421,2731055270),l(289380356,3203993006),l(460393269,320620315),l(685471733,587496836),l(852142971,1086792851),l(1017036298,365543100),l(1126000580,2618297676),l(1288033470,3409855158),l(1501505948,4234509866),l(1607167915,987167468),l(1816402316,1246189591)],u=[];(function(){for(var t=0;t<80;t++)u[t]=l()})();var d=s.SHA512=n.extend({_doReset:function(){this._hash=new o.init([new a.init(1779033703,4089235720),new a.init(3144134277,2227873595),new a.init(1013904242,4271175723),new a.init(2773480762,1595750129),new a.init(1359893119,2917565137),new a.init(2600822924,725511199),new a.init(528734635,4215389547),new a.init(1541459225,327033209)])},_doProcessBlock:function(t,e){for(var i=this._hash.words,n=i[0],r=i[1],a=i[2],o=i[3],s=i[4],l=i[5],d=i[6],h=i[7],p=n.high,f=n.low,v=r.high,g=r.low,m=a.high,y=a.low,b=o.high,x=o.low,_=s.high,w=s.low,C=l.high,S=l.low,k=d.high,A=d.low,T=h.high,M=h.low,I=p,E=f,D=v,P=g,L=m,R=y,F=b,B=x,N=_,O=w,z=C,W=S,V=k,$=A,H=T,K=M,Y=0;Y<80;Y++){var X,U,G=u[Y];if(Y<16)U=G.high=0|t[e+2*Y],X=G.low=0|t[e+2*Y+1];else{var j=u[Y-15],q=j.high,Z=j.low,J=(q>>>1|Z<<31)^(q>>>8|Z<<24)^q>>>7,Q=(Z>>>1|q<<31)^(Z>>>8|q<<24)^(Z>>>7|q<<25),tt=u[Y-2],et=tt.high,it=tt.low,nt=(et>>>19|it<<13)^(et<<3|it>>>29)^et>>>6,rt=(it>>>19|et<<13)^(it<<3|et>>>29)^(it>>>6|et<<26),at=u[Y-7],ot=at.high,st=at.low,lt=u[Y-16],ct=lt.high,ut=lt.low;X=Q+st,U=J+ot+(X>>>0>>0?1:0),X+=rt,U=U+nt+(X>>>0>>0?1:0),X+=ut,U=U+ct+(X>>>0>>0?1:0),G.high=U,G.low=X}var dt=N&z^~N&V,ht=O&W^~O&$,pt=I&D^I&L^D&L,ft=E&P^E&R^P&R,vt=(I>>>28|E<<4)^(I<<30|E>>>2)^(I<<25|E>>>7),gt=(E>>>28|I<<4)^(E<<30|I>>>2)^(E<<25|I>>>7),mt=(N>>>14|O<<18)^(N>>>18|O<<14)^(N<<23|O>>>9),yt=(O>>>14|N<<18)^(O>>>18|N<<14)^(O<<23|N>>>9),bt=c[Y],xt=bt.high,_t=bt.low,wt=K+yt,Ct=H+mt+(wt>>>0>>0?1:0),St=(wt=wt+ht,Ct=Ct+dt+(wt>>>0>>0?1:0),wt=wt+_t,Ct=Ct+xt+(wt>>>0<_t>>>0?1:0),wt=wt+X,Ct=Ct+U+(wt>>>0>>0?1:0),gt+ft),kt=vt+pt+(St>>>0>>0?1:0);H=V,K=$,V=z,$=W,z=N,W=O,O=B+wt|0,N=F+Ct+(O>>>0>>0?1:0)|0,F=L,B=R,L=D,R=P,D=I,P=E,E=wt+St|0,I=Ct+kt+(E>>>0>>0?1:0)|0}f=n.low=f+E,n.high=p+I+(f>>>0>>0?1:0),g=r.low=g+P,r.high=v+D+(g>>>0

>>0?1:0),y=a.low=y+R,a.high=m+L+(y>>>0>>0?1:0),x=o.low=x+B,o.high=b+F+(x>>>0>>0?1:0),w=s.low=w+O,s.high=_+N+(w>>>0>>0?1:0),S=l.low=S+W,l.high=C+z+(S>>>0>>0?1:0),A=d.low=A+$,d.high=k+V+(A>>>0<$>>>0?1:0),M=h.low=M+K,h.high=T+H+(M>>>0>>0?1:0)},_doFinalize:function(){var t=this._data,e=t.words,i=8*this._nDataBytes,n=8*t.sigBytes;e[n>>>5]|=128<<24-n%32,e[30+(n+128>>>10<<5)]=Math.floor(i/4294967296),e[31+(n+128>>>10<<5)]=i,t.sigBytes=4*e.length,this._process();var r=this._hash.toX32();return r},clone:function(){var t=n.clone.call(this);return t._hash=this._hash.clone(),t},blockSize:32});e.SHA512=n._createHelper(d),e.HmacSHA512=n._createHmacHelper(d)}(),t.SHA512})},7628:function(t,e,i){(function(e,n){t.exports=n(i(19021),i(80754),i(84636),i(39506),i(57165))})(0,function(t){return function(){var e=t,i=e.lib,n=i.WordArray,r=i.BlockCipher,a=e.algo,o=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],s=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],l=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],c=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],d=a.DES=r.extend({_doReset:function(){for(var t=this._key,e=t.words,i=[],n=0;n<56;n++){var r=o[n]-1;i[n]=e[r>>>5]>>>31-r%32&1}for(var a=this._subKeys=[],c=0;c<16;c++){var u=a[c]=[],d=l[c];for(n=0;n<24;n++)u[n/6|0]|=i[(s[n]-1+d)%28]<<31-n%6,u[4+(n/6|0)]|=i[28+(s[n+24]-1+d)%28]<<31-n%6;u[0]=u[0]<<1|u[0]>>>31;for(n=1;n<7;n++)u[n]=u[n]>>>4*(n-1)+3;u[7]=u[7]<<5|u[7]>>>27}var h=this._invSubKeys=[];for(n=0;n<16;n++)h[n]=a[15-n]},encryptBlock:function(t,e){this._doCryptBlock(t,e,this._subKeys)},decryptBlock:function(t,e){this._doCryptBlock(t,e,this._invSubKeys)},_doCryptBlock:function(t,e,i){this._lBlock=t[e],this._rBlock=t[e+1],h.call(this,4,252645135),h.call(this,16,65535),p.call(this,2,858993459),p.call(this,8,16711935),h.call(this,1,1431655765);for(var n=0;n<16;n++){for(var r=i[n],a=this._lBlock,o=this._rBlock,s=0,l=0;l<8;l++)s|=c[l][((o^r[l])&u[l])>>>0];this._lBlock=o,this._rBlock=a^s}var d=this._lBlock;this._lBlock=this._rBlock,this._rBlock=d,h.call(this,1,1431655765),p.call(this,8,16711935),p.call(this,2,858993459),h.call(this,16,65535),h.call(this,4,252645135),t[e]=this._lBlock,t[e+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function h(t,e){var i=(this._lBlock>>>t^this._rBlock)&e;this._rBlock^=i,this._lBlock^=i<>>t^this._lBlock)&e;this._lBlock^=i,this._rBlock^=i<192.");var i=e.slice(0,2),r=e.length<4?e.slice(0,2):e.slice(2,4),a=e.length<6?e.slice(0,2):e.slice(4,6);this._des1=d.createEncryptor(n.create(i)),this._des2=d.createEncryptor(n.create(r)),this._des3=d.createEncryptor(n.create(a))},encryptBlock:function(t,e){this._des1.encryptBlock(t,e),this._des2.decryptBlock(t,e),this._des3.encryptBlock(t,e)},decryptBlock:function(t,e){this._des3.decryptBlock(t,e),this._des2.encryptBlock(t,e),this._des1.decryptBlock(t,e)},keySize:6,ivSize:2,blockSize:2});e.TripleDES=r._createHelper(f)}(),t.TripleDES})},43240:function(t,e,i){(function(e,n){t.exports=n(i(19021))})(0,function(t){return function(e){var i=t,n=i.lib,r=n.Base,a=n.WordArray,o=i.x64={};o.Word=r.extend({init:function(t,e){this.high=t,this.low=e}}),o.WordArray=r.extend({init:function(t,i){t=this.words=t||[],this.sigBytes=i!=e?i:8*t.length},toX32:function(){for(var t=this.words,e=t.length,i=[],n=0;n0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(81127),r=e(56252),o=e(2403),l=e(76338),c=(e(74423),e(95353)),p=e(18662),u=e(44146),y=e(62611),d=function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,wrapClassName:t.isDarkTheme?"qd-dark-modal":"",maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal",class:{"theme-dark":t.isDarkTheme}},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right"},style:{color:t.isDarkTheme?"rgba(255,255,255,0.75)":"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{style:{marginTop:"16px",color:t.isDarkTheme?"rgba(255,255,255,0.75)":"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])},m=[],h=e(75769),k="/api/polymarket";function v(t){return(0,h.Ay)({url:"".concat(k,"/analyze"),method:"post",data:t,timeout:12e4})}function g(t){return(0,h.Ay)({url:"".concat(k,"/history"),method:"get",params:t})}var _={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme}}),methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,v({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,r.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,g({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},b=_,f=e(845),C=(0,f.A)(b,d,m,!1,null,"67e891d2",null),S=C.exports,$={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],QuickTradePanel:y.A,PolymarketAnalysisModal:S},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,o.A)(this.opportunities),(0,o.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,r.A)((0,n.A)().m(function e(){var s,i,r;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,u.r9)(i);case 2:r=e.v,r&&1===r.code&&Array.isArray(r.data)&&(a.opportunities=r.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),r=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",r)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},A=$,T=(0,f.A)(A,s,i,!1,null,"443699fa",null),w=T.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/805-legacy.7541cd95.js b/frontend/dist/js/805-legacy.7541cd95.js new file mode 100644 index 0000000..718938f --- /dev/null +++ b/frontend/dist/js/805-legacy.7541cd95.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[805],{86805:function(t,a,s){s.r(a),s.d(a,{default:function(){return D}});s(28706),s(74423),s(34782),s(62010),s(9868),s(21699);var e=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-analysis-container",class:{"theme-dark":t.isDarkTheme,embedded:t.embedded},style:{"--primary-color":t.primaryColor}},[a("div",{staticClass:"main-content-full"},[a("div",{staticClass:"top-index-bar"},[t.loadingSentiment?[t._m(0),t._m(1),t._m(2)]:[a("div",{staticClass:"indicator-box fear-greed",class:t.getFearGreedClass(t.marketData.fearGreed)},[a("span",{staticClass:"ind-label"},[t._v(t._s(t.$t("globalMarket.fearGreedShort")))]),a("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.fearGreed||"--"))])]),a("div",{staticClass:"indicator-box vix",class:t.getVixLevel(t.marketData.vix)},[a("span",{staticClass:"ind-label"},[t._v("VIX")]),a("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.vix||"--"))])]),a("div",{staticClass:"indicator-box dxy"},[a("span",{staticClass:"ind-label"},[t._v("DXY")]),a("span",{staticClass:"ind-value"},[t._v(t._s(t.marketData.dxy||"--"))])])],a("div",{staticClass:"indices-marquee"},[t.loadingIndices?[a("div",{staticClass:"indices-loading"},[a("a-icon",{attrs:{type:"loading"}}),t._v(" "+t._s(t.$t("common.loading")||"加载中...")+" ")],1)]:t.marketData.indices.length>0?[a("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(s){return a("div",{key:"a-"+s.symbol,staticClass:"index-item"},[a("span",{staticClass:"idx-flag"},[t._v(t._s(s.flag))]),a("span",{staticClass:"idx-symbol"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(s.price)))]),a("span",{staticClass:"idx-change",class:s.change>=0?"up":"down"},[a("a-icon",{attrs:{type:s.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(s.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(s){return a("div",{key:"b-"+s.symbol,staticClass:"index-item"},[a("span",{staticClass:"idx-flag"},[t._v(t._s(s.flag))]),a("span",{staticClass:"idx-symbol"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(s.price)))]),a("span",{staticClass:"idx-change",class:s.change>=0?"up":"down"},[a("a-icon",{attrs:{type:s.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(s.change).toFixed(2))+"% ")],1)])})],2)]:[a("div",{staticClass:"indices-empty"},[t._v("--")])]],2),a("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[a("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),a("div",{staticClass:"main-body"},[a("div",{staticClass:"left-panel"},[a("div",{staticClass:"heatmap-box"},[a("div",{staticClass:"box-header"},[a("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(a){t.heatmapType=a},expression:"heatmapType"}},[a("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),a("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),a("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),a("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),a("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return a("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(s,e){return a("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(s.value)},[a("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(s)))]),s.price?a("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(s.price)))]):t._e(),a("span",{staticClass:"heat-val"},[t._v(t._s(s.value>=0?"+":"")+t._s(t.formatNum(s.value))+"%")])])}):[a("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),a("div",{staticClass:"calendar-box"},[a("div",{staticClass:"box-header"},[a("span",{staticClass:"box-title"},[a("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),a("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return a("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(s){return a("div",{key:s.id,staticClass:"cal-item",class:s.importance},[a("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(s.date)))]),a("span",{staticClass:"cal-time"},[t._v(t._s(s.time||"--:--"))]),a("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(s.country)))]),a("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?s.name:s.name_en))]),a("span",{staticClass:"cal-impact",class:t.getImpactClass(s)},["bullish"===t.getImpactClass(s)?a("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(s)?a("a-icon",{attrs:{type:"arrow-down"}}):a("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(s.actual||s.forecast||"--")+" ")],1)])}):[a("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),a("div",{staticClass:"right-panel"},[a("div",{staticClass:"analysis-toolbar"},[a("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(a){t.selectedSymbol=a},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(s){return a("a-select-option",{key:"".concat(s.market,"-").concat(s.symbol),attrs:{value:"".concat(s.market,":").concat(s.symbol)}},[a("span",{staticClass:"symbol-option"},[a("a-tag",{attrs:{color:t.getMarketColor(s.market),size:"small"}},[t._v(t._s(t.getMarketName(s.market)))]),a("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(s.symbol))]),s.name?a("span",{staticClass:"symbol-name"},[t._v(t._s(s.name))]):t._e()],1)])}),a("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[a("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),a("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),a("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(a){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),a("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():a("div",{staticClass:"analysis-placeholder"},[a("div",{staticClass:"placeholder-hero"},[t._m(3),a("div",{staticClass:"hero-body"},[a("div",{staticClass:"hero-badge"},[t._v("AI-POWERED")]),a("h2",{staticClass:"hero-title"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.title")))]),a("p",{staticClass:"hero-subtitle"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.subtitle")))]),a("div",{staticClass:"hero-stats"},[a("div",{staticClass:"hstat"},[a("div",{staticClass:"hstat-icon"},[a("a-icon",{attrs:{type:"line-chart"}})],1),a("div",{staticClass:"hstat-body"},[a("span",{staticClass:"hstat-val"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature1")))]),a("span",{staticClass:"hstat-label"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature1Desc")))])])]),a("div",{staticClass:"hstat"},[a("div",{staticClass:"hstat-icon"},[a("a-icon",{attrs:{type:"dashboard"}})],1),a("div",{staticClass:"hstat-body"},[a("span",{staticClass:"hstat-val"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature2")))]),a("span",{staticClass:"hstat-label"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature2Desc")))])])]),a("div",{staticClass:"hstat"},[a("div",{staticClass:"hstat-icon"},[a("a-icon",{attrs:{type:"apartment"}})],1),a("div",{staticClass:"hstat-body"},[a("span",{staticClass:"hstat-val"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature3")))]),a("span",{staticClass:"hstat-label"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.feature3Desc")))])])])]),a("div",{staticClass:"hero-cta"},[a("a-button",{attrs:{type:"primary",size:"large",icon:"plus"},on:{click:function(a){t.showAddStockModal=!0}}},[t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")]),a("a-button",{attrs:{size:"large",icon:"thunderbolt",disabled:!t.selectedSymbol},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")])],1),a("p",{staticClass:"hero-hint"},[t._v(t._s(t.$t("aiAssetAnalysis.placeholder.quickStart")))])])])]),t.analysisResult||t.analyzing||t.analysisError?a("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),a("div",{staticClass:"watchlist-panel"},[a("div",{staticClass:"panel-header"},[a("span",{staticClass:"panel-title"},[a("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),a("span",{staticClass:"panel-header-actions"},[a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.tasks.manage")}},[a("a-badge",{attrs:{count:t.monitors.length,offset:[-2,2],"number-style":{fontSize:"9px",minWidth:"14px",height:"14px",lineHeight:"14px",padding:"0 3px"}}},[a("a-icon",{staticClass:"panel-header-icon",attrs:{type:"unordered-list"},on:{click:function(a){t.showTaskDrawer=!0}}})],1)],1),a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.batch.schedule")}},[a("a-icon",{staticClass:"panel-header-icon",attrs:{type:"schedule"},on:{click:t.toggleBatchMode}})],1),a("a-icon",{staticClass:"panel-header-icon",attrs:{type:"plus"},on:{click:function(a){t.showAddStockModal=!0}}})],1)]),t.watchlist&&t.watchlist.length>0?a("div",{staticClass:"panel-summary"},[a("div",{staticClass:"summary-chip"},[a("span",{staticClass:"sc-num"},[t._v(t._s(t.watchlist.length))]),a("span",{staticClass:"sc-label"},[t._v(t._s(t.$t("aiAssetAnalysis.watchlist.totalAssets")))])]),t.watchlistPositionCount>0?a("div",{staticClass:"summary-chip"},[a("span",{staticClass:"sc-num"},[t._v(t._s(t.watchlistPositionCount))]),a("span",{staticClass:"sc-label"},[t._v(t._s(t.$t("aiAssetAnalysis.watchlist.positionCount")))])]):t._e(),t.watchlistTaskCount>0?a("div",{staticClass:"summary-chip"},[a("span",{staticClass:"sc-num"},[t._v(t._s(t.watchlistTaskCount))]),a("span",{staticClass:"sc-label"},[t._v(t._s(t.$t("aiAssetAnalysis.watchlist.taskCount")))])]):t._e(),0!==t.watchlistTotalPnl?a("div",{staticClass:"summary-chip pnl"},[a("span",{staticClass:"sc-num",class:t.watchlistTotalPnl>=0?"up":"down"},[t._v(t._s(t.watchlistTotalPnl>=0?"+":"")+t._s(t.formatNum(t.watchlistTotalPnl)))]),a("span",{staticClass:"sc-label"},[t._v("P&L")])]):t._e()]):t._e(),t.batchMode?a("div",{staticClass:"batch-bar"},[a("a-checkbox",{staticClass:"batch-all-cb",attrs:{checked:t.batchSelectedAll,indeterminate:t.batchIndeterminate},on:{change:t.onBatchSelectAll}},[t._v(" "+t._s(t.$t("aiAssetAnalysis.batch.selectAll"))+" ")]),a("a-button",{attrs:{type:"primary",size:"small",icon:"clock-circle",disabled:0===t.batchSelectedKeys.length},on:{click:t.openBatchScheduleModal}},[t._v(" "+t._s(t.$t("aiAssetAnalysis.batch.schedule"))+" "),t.batchSelectedKeys.length>0?a("span",[t._v("("+t._s(t.batchSelectedKeys.length)+")")]):t._e()]),a("a-button",{attrs:{size:"small"},on:{click:t.toggleBatchMode}},[t._v(t._s(t.$t("common.cancel")))])],1):t._e(),a("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(s){var e,i,n;return a("div",{key:"wl-".concat(s.market,"-").concat(s.symbol),staticClass:"wl-card",class:{active:t.selectedSymbol==="".concat(s.market,":").concat(s.symbol)},on:{click:function(a){return t.selectWatchlistItem(s)}}},[t.batchMode?a("a-checkbox",{staticClass:"wl-card-cb",attrs:{checked:t.batchSelectedKeys.includes("".concat(s.market,":").concat(s.symbol))},on:{change:function(a){return t.onBatchItemToggle(s,a)}},nativeOn:{click:function(t){t.stopPropagation()}}}):t._e(),a("div",{staticClass:"wl-card-body",class:{"with-cb":t.batchMode}},[a("div",{staticClass:"wl-row-main"},[a("span",{staticClass:"wl-symbol"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"wl-market"},[t._v(t._s(t.getMarketName(s.market)))]),a("span",{staticClass:"wl-spacer"}),t.watchlistPrices["".concat(s.market,":").concat(s.symbol)]?[a("span",{staticClass:"wl-price"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(s.market,":").concat(s.symbol)].price)))]),a("span",{staticClass:"wl-change",class:((null===(e=t.watchlistPrices["".concat(s.market,":").concat(s.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(s.market,":").concat(s.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(n=t.watchlistPrices["".concat(s.market,":").concat(s.symbol)])||void 0===n?void 0:n.change))+"% ")])]:t._e()],2),t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)]?a("div",{staticClass:"wl-row-pnl"},[a("span",{staticClass:"wl-pnl-qty"},[t._v(t._s(t.formatNum(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].quantity,4))+" @ "+t._s(t.formatPrice(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].avgEntry||0)))]),a("span",{staticClass:"wl-pnl-val",class:t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnl>=0?"up":"down"},[t._v(" "+t._s(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnl>=0?"+":"")+t._s(t.formatNum(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnl||0))+" ("+t._s(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnlPercent>=0?"+":"")+t._s(t.formatNum(t.positionSummaryMap["".concat(s.market,":").concat(s.symbol)].pnlPercent||0))+"%) ")])]):t._e(),t.getMonitorMeta(s)?a("div",{staticClass:"wl-row-task"},[a("span",{staticClass:"wl-task-badge",class:t.getMonitorMeta(s).activeCount>0?"active":"paused",on:{click:function(a){return a.stopPropagation(),t.toggleStockMonitor(s)}}},[a("a-icon",{attrs:{type:t.getMonitorMeta(s).activeCount>0?"sync":"pause-circle",spin:t.getMonitorMeta(s).activeCount>0}}),t._v(" "+t._s(t.getMonitorMeta(s).activeCount>0?t.$t("aiAssetAnalysis.monitor.running"):t.$t("aiAssetAnalysis.monitor.paused"))+" ")],1),t.getMonitorMeta(s).nextRunAtText?a("span",{staticClass:"wl-task-next"},[t._v(t._s(t.getMonitorMeta(s).nextRunAtText))]):t._e()]):t._e()]),a("div",{staticClass:"wl-card-hover-actions"},[a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.position.quickAdd")}},[a("span",{staticClass:"wl-hover-btn",on:{click:function(a){return a.stopPropagation(),t.openPositionModal(s)}}},[a("a-icon",{attrs:{type:"wallet"}})],1)]),a("a-tooltip",{attrs:{title:t.$t("aiAssetAnalysis.monitor.quickTask")}},[a("span",{staticClass:"wl-hover-btn",on:{click:function(a){return a.stopPropagation(),t.openMonitorModal(s)}}},[a("a-icon",{attrs:{type:"clock-circle"}})],1)]),a("span",{staticClass:"wl-hover-btn danger",on:{click:function(a){return a.stopPropagation(),t.removeFromWatchlist(s)}}},[a("a-icon",{attrs:{type:"delete"}})],1)],1)],1)}),t.watchlist&&0!==t.watchlist.length?t._e():a("div",{staticClass:"watchlist-empty"},[a("div",{staticClass:"we-icon"},[a("a-icon",{attrs:{type:"star"}})],1),a("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),a("a-button",{attrs:{type:"primary",size:"small",icon:"plus"},on:{click:function(a){t.showAddStockModal=!0}}},[t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")])],1)],2)])])]),a("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",wrapClassName:t.isDarkTheme?"qd-dark-modal":"",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[a("div",{staticClass:"add-stock-modal-content"},[a("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(a){t.selectedMarketTab=a},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(s){return a("a-tab-pane",{key:s.value,attrs:{tab:t.$t(s.i18nKey||"dashboard.analysis.market.".concat(s.value))}})}),1),a("div",{staticClass:"symbol-search-section"},[a("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(a){t.symbolSearchKeyword=a},expression:"symbolSearchKeyword"}},[a("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?a("div",{staticClass:"search-results-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),a("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(s){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return t.selectSymbol(s)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"symbol-name"},[t._v(t._s(s.name))]),s.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(s.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),a("div",{staticClass:"hot-symbols-section"},[a("div",{staticClass:"section-title"},[a("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),a("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?a("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(s){return a("a-list-item",{staticClass:"symbol-list-item",on:{click:function(a){return t.selectSymbol(s)}}},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticClass:"symbol-item-content"},[a("span",{staticClass:"symbol-code"},[t._v(t._s(s.symbol))]),a("span",{staticClass:"symbol-name"},[t._v(t._s(s.name))]),s.exchange?a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(s.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):a("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?a("div",{staticClass:"selected-symbol-section"},[a("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(a){t.selectedSymbolForAdd=null}}},[a("template",{slot:"description"},[a("div",{staticClass:"selected-symbol-info"},[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),a("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?a("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),a("a-modal",{attrs:{visible:t.showPositionModal,title:"".concat(t.$i18n&&"zh-CN"===t.$i18n.locale?"创建持仓(虚拟仓)":"Create Position (Virtual)"," - ").concat(t.targetStockForOps?t.targetStockForOps.symbol:""),wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.savePosition,cancel:function(a){t.showPositionModal=!1}}},[a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("portfolio.positions.side")||"Direction"}},[a("a-select",{model:{value:t.positionForm.side,callback:function(a){t.$set(t.positionForm,"side",a)},expression:"positionForm.side"}},[a("a-select-option",{attrs:{value:"long"}},[t._v(t._s(t.$t("portfolio.positions.long")||"Long"))]),a("a-select-option",{attrs:{value:"short"}},[t._v(t._s(t.$t("portfolio.positions.short")||"Short"))])],1)],1),a("a-form-item",{attrs:{label:t.$i18n&&"zh-CN"===t.$i18n.locale?"数量":"Quantity"}},[a("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:.01},model:{value:t.positionForm.quantity,callback:function(a){t.$set(t.positionForm,"quantity",a)},expression:"positionForm.quantity"}})],1),a("a-form-item",{attrs:{label:t.$i18n&&"zh-CN"===t.$i18n.locale?"买入单价":"Entry Price"}},[a("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,step:.01},model:{value:t.positionForm.entryPrice,callback:function(a){t.$set(t.positionForm,"entryPrice",a)},expression:"positionForm.entryPrice"}})],1)],1)],1),a("a-modal",{attrs:{visible:t.showMonitorModal,title:"".concat(t.$t("aiAssetAnalysis.monitor.quickTask")," - ").concat(t.targetStockForOps?t.targetStockForOps.symbol:""),wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.saveMonitorTask,cancel:function(a){t.showMonitorModal=!1}}},[a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.intervalLabel")}},[a("a-select",{staticStyle:{width:"100%"},model:{value:t.monitorForm.interval_min,callback:function(a){t.$set(t.monitorForm,"interval_min",a)},expression:"monitorForm.interval_min"}},[a("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval1h")))]),a("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval4h")))]),a("a-select-option",{attrs:{value:720}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval12h")))]),a("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval24h")))])],1)],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.notifyLabel")}},[a("a-checkbox-group",{staticStyle:{width:"100%"},model:{value:t.monitorForm.notify_channels,callback:function(a){t.$set(t.monitorForm,"notify_channels",a)},expression:"monitorForm.notify_channels"}},[a("a-row",{attrs:{gutter:8}},[a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"email"}},[a("a-icon",{attrs:{type:"mail"}}),t._v(" Email")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"telegram"}},[a("a-icon",{attrs:{type:"send"}}),t._v(" Telegram")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"webhook"}},[a("a-icon",{attrs:{type:"api"}}),t._v(" Webhook")],1)],1)],1)],1)],1),a("a-alert",{attrs:{message:t.$t("aiAssetAnalysis.monitor.tip"),type:"info","show-icon":""}})],1)],1),a("a-modal",{attrs:{visible:t.showBatchScheduleModal,title:t.$t("aiAssetAnalysis.batch.scheduleTitle"),confirmLoading:t.batchRunning,width:"520px",wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.saveBatchSchedule,cancel:function(a){t.showBatchScheduleModal=!1}}},[a("div",{staticClass:"batch-modal-summary"},[a("p",[t._v(t._s(t.$t("aiAssetAnalysis.batch.scheduleDesc",{count:t.batchSelectedKeys.length})))]),a("div",{staticClass:"batch-symbols-preview"},t._l(t.batchSelectedKeys,function(s){return a("a-tag",{key:s,staticStyle:{"margin-bottom":"4px"},attrs:{color:"blue"}},[t._v(t._s(s.split(":")[1]))])}),1)]),a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.intervalLabel")}},[a("a-select",{staticStyle:{width:"100%"},model:{value:t.batchScheduleForm.interval_min,callback:function(a){t.$set(t.batchScheduleForm,"interval_min",a)},expression:"batchScheduleForm.interval_min"}},[a("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval1h")))]),a("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval4h")))]),a("a-select-option",{attrs:{value:720}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval12h")))]),a("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval24h")))])],1)],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.notifyLabel")}},[a("a-checkbox-group",{staticStyle:{width:"100%"},model:{value:t.batchScheduleForm.notify_channels,callback:function(a){t.$set(t.batchScheduleForm,"notify_channels",a)},expression:"batchScheduleForm.notify_channels"}},[a("a-row",{attrs:{gutter:8}},[a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"email"}},[a("a-icon",{attrs:{type:"mail"}}),t._v(" Email")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"telegram"}},[a("a-icon",{attrs:{type:"send"}}),t._v(" Telegram")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"webhook"}},[a("a-icon",{attrs:{type:"api"}}),t._v(" Webhook")],1)],1)],1)],1)],1)],1),a("a-alert",{staticStyle:{"margin-top":"8px"},attrs:{message:t.$t("aiAssetAnalysis.batch.scheduleTip"),type:"info","show-icon":""}})],1),a("a-drawer",{attrs:{title:t.$t("aiAssetAnalysis.tasks.manage"),visible:t.showTaskDrawer,width:"420",placement:"right",wrapClassName:t.isDarkTheme?"qd-dark-drawer":""},on:{close:function(a){t.showTaskDrawer=!1}}},[0===t.monitors.length?a("div",{staticClass:"task-drawer-empty"},[a("a-icon",{staticStyle:{"font-size":"40px",color:"#ccc"},attrs:{type:"inbox"}}),a("p",[t._v(t._s(t.$t("aiAssetAnalysis.tasks.empty")))])],1):a("div",{staticClass:"task-drawer-list"},t._l(t.monitors,function(s){return a("div",{key:s.id,staticClass:"task-item"},[a("div",{staticClass:"task-item-header"},[a("span",{staticClass:"task-item-name"},[t._v(t._s(s.name||"AI Task"))]),a("a-tag",{attrs:{color:s.is_active?"green":"default",size:"small"}},[t._v(" "+t._s(s.is_active?t.$t("aiAssetAnalysis.monitor.running"):t.$t("aiAssetAnalysis.monitor.paused"))+" ")])],1),a("div",{staticClass:"task-item-meta"},[s.config&&s.config.run_interval_minutes?a("span",[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.formatIntervalText(s.config.run_interval_minutes))+" ")],1):t._e(),s.next_run_at?a("span",[a("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t._formatNextRunText(s.next_run_at))+" ")],1):t._e()]),a("div",{staticClass:"task-item-actions"},[a("a-button",{attrs:{size:"small",type:s.is_active?"default":"primary",icon:"poweroff"},on:{click:function(a){return t.handleToggleTask(s)}}},[t._v(" "+t._s(s.is_active?t.$t("aiAssetAnalysis.tasks.pause"):t.$t("aiAssetAnalysis.tasks.resume"))+" ")]),a("a-button",{attrs:{size:"small",icon:"edit"},on:{click:function(a){return t.handleEditTask(s)}}},[t._v(t._s(t.$t("aiAssetAnalysis.tasks.edit")))]),a("a-popconfirm",{attrs:{title:t.$t("aiAssetAnalysis.tasks.deleteConfirm"),okText:t.$t("common.confirm"),cancelText:t.$t("common.cancel")},on:{confirm:function(a){return t.handleDeleteTask(s)}}},[a("a-button",{attrs:{size:"small",type:"danger",icon:"delete"}},[t._v(t._s(t.$t("aiAssetAnalysis.tasks.delete")))])],1)],1)])}),0)]),a("a-modal",{attrs:{visible:t.showEditTaskModal,title:t.$t("aiAssetAnalysis.tasks.edit"),confirmLoading:t.editTaskLoading,wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{ok:t.saveEditTask,cancel:function(a){t.showEditTaskModal=!1}}},[t.editTaskForm?a("a-form",{attrs:{layout:"vertical"}},[a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.tasks.name")}},[a("a-input",{model:{value:t.editTaskForm.name,callback:function(a){t.$set(t.editTaskForm,"name",a)},expression:"editTaskForm.name"}})],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.intervalLabel")}},[a("a-select",{staticStyle:{width:"100%"},model:{value:t.editTaskForm.interval_min,callback:function(a){t.$set(t.editTaskForm,"interval_min",a)},expression:"editTaskForm.interval_min"}},[a("a-select-option",{attrs:{value:60}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval1h")))]),a("a-select-option",{attrs:{value:240}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval4h")))]),a("a-select-option",{attrs:{value:720}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval12h")))]),a("a-select-option",{attrs:{value:1440}},[t._v(t._s(t.$t("aiAssetAnalysis.batch.interval24h")))])],1)],1),a("a-form-item",{attrs:{label:t.$t("aiAssetAnalysis.batch.notifyLabel")}},[a("a-checkbox-group",{staticStyle:{width:"100%"},model:{value:t.editTaskForm.notify_channels,callback:function(a){t.$set(t.editTaskForm,"notify_channels",a)},expression:"editTaskForm.notify_channels"}},[a("a-row",{attrs:{gutter:8}},[a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"email"}},[a("a-icon",{attrs:{type:"mail"}}),t._v(" Email")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"telegram"}},[a("a-icon",{attrs:{type:"send"}}),t._v(" Telegram")],1)],1),a("a-col",{attrs:{span:8}},[a("a-checkbox",{attrs:{value:"webhook"}},[a("a-icon",{attrs:{type:"api"}}),t._v(" Webhook")],1)],1)],1)],1)],1)],1):t._e()],1),a("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"},wrapClassName:t.isDarkTheme?"qd-dark-modal":""},on:{cancel:function(a){t.showHistoryModal=!1}}},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(a){t.historyPage=a,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(a,s){t.historyPageSize=s,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(s){return a("a-list-item",{},[a("a-list-item-meta",[a("template",{slot:"title"},[a("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[a("div",[a("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(s.market)}},[t._v(" "+t._s(t.getMarketName(s.market))+" ")]),a("strong",[t._v(t._s(s.symbol))]),a("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===s.decision?"green":"SELL"===s.decision?"red":"blue"}},[t._v(" "+t._s(s.decision)+" ")]),a("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{color:t.getStatusColor(s.status||"completed")}},[t._v(" "+t._s(t.getStatusText(s.status||"completed"))+" ")]),a("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(s.confidence)+"% ")])],1),a("div",[a("a-button",{attrs:{type:"link",size:"small",icon:"eye",disabled:"processing"===(s.status||"").toLowerCase()},on:{click:function(a){return t.viewHistoryResult(s)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),a("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(a){return t.deleteHistoryItem(s)}}},[a("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),a("template",{slot:"description"},[a("div",{staticStyle:{color:"#666","font-size":"12px"}},[s.price?a("span",[t._v("$"+t._s(t.formatNumber(s.price)))]):t._e(),s.summary?a("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(s.summary.substring(0,80))+t._s(s.summary.length>80?"...":""))]):t._e()]),s.created_at?a("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(s.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():a("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,a=t._self._c;return a("div",{staticClass:"indicator-box skeleton-box"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])},function(){var t=this,a=t._self._c;return a("div",{staticClass:"indicator-box skeleton-box"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])},function(){var t=this,a=t._self._c;return a("div",{staticClass:"indicator-box skeleton-box"},[a("span",{staticClass:"skeleton-text short"}),a("span",{staticClass:"skeleton-text"})])},function(){var t=this,a=t._self._c;return a("div",{staticClass:"hero-bg"},[a("div",{staticClass:"hero-bg-circle c1"}),a("div",{staticClass:"hero-bg-circle c2"}),a("div",{staticClass:"hero-bg-grid"})])}],n=s(44735),r=s(21560),o=s(57532),l=s(2403),c=s(15863),d=s(81127),u=s(56252),m=s(76338),h=(s(2008),s(50113),s(62062),s(2892),s(32637),s(40150),s(79432),s(26099),s(16034),s(31415),s(47764),s(42762),s(23500),s(62953),s(95353)),p=s(505),v=s(35038),y=s(24364),f=s(75769),b="/api/fast-analysis";function g(t){return(0,f.Ay)({url:"".concat(b,"/analyze"),method:"post",data:t,timeout:3e5})}function _(t){return(0,f.Ay)({url:"".concat(b,"/history/all"),method:"get",params:t})}function k(t){return(0,f.Ay)({url:"".concat(b,"/history/").concat(t),method:"delete"})}function C(t){return(0,f.Ay)({url:"".concat(b,"/feedback"),method:"post",data:t})}var A=s(44146),S=function(){var t,a,s,e,i,n,r,o,l,c,d,u,m,h,p,v,y,f,b,g,_,k,C=this,A=C._self._c;return A("div",{staticClass:"fast-analysis-report",class:{"theme-dark":C.isDarkTheme}},[C.loading?A("div",{staticClass:"loading-container"},[A("div",{staticClass:"loading-content-pro"},[A("div",{staticClass:"loading-header"},[A("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),A("span",{staticClass:"loading-title"},[C._v(C._s(C.$t("fastAnalysis.analyzing")))])],1),A("div",{staticClass:"progress-wrapper"},[A("a-progress",{attrs:{percent:C.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),A("span",{staticClass:"progress-text"},[C._v(C._s(C.formatProgress(C.progressPercent))+"%")])],1),A("div",{staticClass:"current-step"},[A("a-icon",{attrs:{type:"loading",spin:""}}),A("span",[C._v(C._s(C.currentStepText))])],1),A("div",{staticClass:"steps-list"},[A("div",{staticClass:"step-item",class:{done:C.step>1,active:1===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step1")||"获取实时数据"))]),C.step>1?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1),A("div",{staticClass:"step-item",class:{done:C.step>2,active:2===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step2")||"计算技术指标"))]),C.step>2?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1),A("div",{staticClass:"step-item",class:{done:C.step>3,active:3===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step3")||"AI深度分析"))]),C.step>3?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1),A("div",{staticClass:"step-item",class:{done:C.step>4,active:4===C.step}},[A("span",{staticClass:"step-dot"}),A("span",{staticClass:"step-text"},[C._v(C._s(C.$t("fastAnalysis.step4")||"生成报告"))]),C.step>4?A("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):C._e()],1)]),A("div",{staticClass:"loading-footer"},[A("span",{staticClass:"elapsed-time"},[C._v(C._s(C.elapsedTimeText))])])])]):C.error?A("div",{staticClass:"error-container"},[A("a-result",{attrs:{status:"warning"===C.errorTone?"warning":"error",title:C.errorTitle,"sub-title":C.error},scopedSlots:C._u([{key:"extra",fn:function(){return[A("a-button",{attrs:{type:"primary"},on:{click:function(t){return C.$emit("retry")}}},[C._v(" "+C._s(C.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):C.result?A("div",{staticClass:"result-container"},[A("div",{staticClass:"decision-card",class:C.decisionClass},[A("div",{staticClass:"decision-main"},[A("div",{staticClass:"decision-badge"},[A("a-icon",{attrs:{type:C.decisionIcon}}),A("span",{staticClass:"decision-text"},[C._v(C._s(C.result.decision))])],1),A("div",{staticClass:"confidence-ring"},[A("a-progress",{attrs:{type:"circle",percent:C.result.confidence,width:80,strokeColor:C.confidenceColor},scopedSlots:C._u([{key:"format",fn:function(t){return[A("span",{staticClass:"confidence-value"},[C._v(C._s(t)+"%")])]}}])}),A("div",{staticClass:"confidence-label"},[C._v(C._s(C.$t("fastAnalysis.confidence")))])],1)]),A("div",{staticClass:"decision-summary"},[C._v(" "+C._s(C.result.summary)+" ")]),C.consensusBlock?A("div",{staticClass:"consensus-strip"},[A("div",{staticClass:"consensus-strip-title"},[A("a-icon",{attrs:{type:"cluster"}}),C._v(" "+C._s(C.$t("fastAnalysis.consensusTitle"))+" ")],1),A("div",{staticClass:"consensus-strip-metrics"},[A("span",{staticClass:"cm-item"},[A("em",[C._v(C._s(C.$t("fastAnalysis.consensusDecision")))]),C._v(" "+C._s(C.consensusBlock.consensus_decision)+" ")]),A("span",{staticClass:"cm-item"},[A("em",[C._v(C._s(C.$t("fastAnalysis.consensusScore")))]),C._v(" "+C._s(C.formatConsensusNum(C.consensusBlock.consensus_score))+" ")]),null!=C.consensusBlock.agreement_ratio?A("span",{staticClass:"cm-item"},[A("em",[C._v(C._s(C.$t("fastAnalysis.consensusAgreement")))]),C._v(" "+C._s(C.formatAgreementPct(C.consensusBlock.agreement_ratio))+" ")]):C._e()])]):C._e()]),A("div",{staticClass:"price-info-row"},[A("div",{staticClass:"price-card current"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.currentPrice")))]),A("div",{staticClass:"price-value"},[C._v("$"+C._s(C.formatPrice(null===(t=C.result.market_data)||void 0===t?void 0:t.current_price)))]),A("div",{staticClass:"price-change",class:(null===(a=C.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"positive":"negative"},[C._v(" "+C._s((null===(s=C.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"+":"")+C._s(C.formatNumber(null===(e=C.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),A("div",{staticClass:"price-card entry"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.entryPrice")))]),A("div",{staticClass:"price-value"},[C._v("$"+C._s(C.formatPrice(C.tradingPlan.entry_price)))])]),A("div",{staticClass:"price-card stop"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.stopLoss")))]),A("div",{staticClass:"price-value negative"},[C._v("$"+C._s(C.formatPrice(C.tradingPlan.stop_loss)))]),A("div",{staticClass:"price-hint"},[A("a-tooltip",{attrs:{title:C.stopLossHintText}},[A("a-icon",{attrs:{type:"info-circle"}}),C._v(" "+C._s(C.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),A("div",{staticClass:"price-card target"},[A("div",{staticClass:"price-label"},[C._v(C._s(C.$t("fastAnalysis.takeProfit")))]),A("div",{staticClass:"price-value positive"},[C._v("$"+C._s(C.formatPrice(C.tradingPlan.take_profit)))]),A("div",{staticClass:"price-hint"},[A("a-tooltip",{attrs:{title:C.takeProfitHintText}},[A("a-icon",{attrs:{type:"info-circle"}}),C._v(" "+C._s(C.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),C.trendOutlookBlocks.length||C.trendOutlookSummaryText?A("div",{staticClass:"trend-outlook-card"},[A("div",{staticClass:"trend-outlook-header"},[A("a-icon",{attrs:{type:"calendar"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.trendOutlookTitle")))])],1),C.trendOutlookSummaryText?A("div",{staticClass:"trend-outlook-summary"},[C._v(" "+C._s(C.trendOutlookSummaryText)+" ")]):C._e(),C.trendOutlookBlocks.length?A("div",{staticClass:"trend-outlook-grid"},C._l(C.trendOutlookBlocks,function(t){return A("div",{key:t.key,staticClass:"trend-outlook-item"},[A("div",{staticClass:"to-label"},[C._v(C._s(t.label))]),A("div",{staticClass:"to-trend",class:C.outlookTrendClass(t.trend)},[C._v(" "+C._s(C.formatOutlookTrend(t.trend))+" ")]),A("div",{staticClass:"to-meta"},[A("span",{staticClass:"to-score"},[C._v(C._s(null!=t.score?t.score:"--"))]),A("span",{staticClass:"to-str"},[C._v(C._s(t.strength||"--"))])])])}),0):C._e()]):C._e(),A("div",{staticClass:"scores-row"},[A("div",{staticClass:"score-item"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"line-chart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.technical")))])],1),A("a-progress",{attrs:{percent:(null===(i=C.result.scores)||void 0===i?void 0:i.technical)||50,strokeColor:C.getScoreColor(null===(n=C.result.scores)||void 0===n?void 0:n.technical),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(r=C.result.scores)||void 0===r?void 0:r.technical)||50))])],1),A("div",{staticClass:"score-item"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"bank"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.fundamental")))])],1),A("a-progress",{attrs:{percent:(null===(o=C.result.scores)||void 0===o?void 0:o.fundamental)||50,strokeColor:C.getScoreColor(null===(l=C.result.scores)||void 0===l?void 0:l.fundamental),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(c=C.result.scores)||void 0===c?void 0:c.fundamental)||50))])],1),A("div",{staticClass:"score-item"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"heart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.sentiment")))])],1),A("a-progress",{attrs:{percent:(null===(d=C.result.scores)||void 0===d?void 0:d.sentiment)||50,strokeColor:C.getScoreColor(null===(u=C.result.scores)||void 0===u?void 0:u.sentiment),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(m=C.result.scores)||void 0===m?void 0:m.sentiment)||50))])],1),A("div",{staticClass:"score-item overall"},[A("div",{staticClass:"score-header"},[A("a-icon",{attrs:{type:"dashboard"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.overall")))])],1),A("a-progress",{attrs:{percent:(null===(h=C.result.scores)||void 0===h?void 0:h.overall)||50,strokeColor:C.getScoreColor(null===(p=C.result.scores)||void 0===p?void 0:p.overall),showInfo:!1}}),A("div",{staticClass:"score-value"},[C._v(C._s((null===(v=C.result.scores)||void 0===v?void 0:v.overall)||50))])],1)]),C.result.detailed_analysis?A("div",{staticClass:"detailed-analysis"},[C.result.detailed_analysis.technical?A("div",{staticClass:"analysis-card technical"},[A("div",{staticClass:"analysis-card-header"},[A("a-icon",{attrs:{type:"line-chart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.technicalAnalysis")))]),A("a-tag",{attrs:{color:C.getScoreTagColor(null===(y=C.result.scores)||void 0===y?void 0:y.technical)}},[C._v(" "+C._s((null===(f=C.result.scores)||void 0===f?void 0:f.technical)||50)+"分 ")])],1),A("div",{staticClass:"analysis-card-content"},[C._v(" "+C._s(C.result.detailed_analysis.technical)+" ")])]):C._e(),C.result.detailed_analysis.fundamental?A("div",{staticClass:"analysis-card fundamental"},[A("div",{staticClass:"analysis-card-header"},[A("a-icon",{attrs:{type:"bank"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.fundamentalAnalysis")))]),A("a-tag",{attrs:{color:C.getScoreTagColor(null===(b=C.result.scores)||void 0===b?void 0:b.fundamental)}},[C._v(" "+C._s((null===(g=C.result.scores)||void 0===g?void 0:g.fundamental)||50)+"分 ")])],1),A("div",{staticClass:"analysis-card-content"},[C._v(" "+C._s(C.result.detailed_analysis.fundamental)+" ")])]):C._e(),C.result.detailed_analysis.sentiment?A("div",{staticClass:"analysis-card sentiment"},[A("div",{staticClass:"analysis-card-header"},[A("a-icon",{attrs:{type:"heart"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.sentimentAnalysis")))]),A("a-tag",{attrs:{color:C.getScoreTagColor(null===(_=C.result.scores)||void 0===_?void 0:_.sentiment)}},[C._v(" "+C._s((null===(k=C.result.scores)||void 0===k?void 0:k.sentiment)||50)+"分 ")])],1),A("div",{staticClass:"analysis-card-content"},[C._v(" "+C._s(C.result.detailed_analysis.sentiment)+" ")])]):C._e()]):C._e(),A("div",{staticClass:"analysis-details"},[A("div",{staticClass:"detail-section reasons"},[A("div",{staticClass:"section-title"},[A("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.keyReasons")))])],1),A("ul",{staticClass:"detail-list"},C._l(C.result.reasons,function(t,a){return A("li",{key:"r-"+a},[C._v(" "+C._s(t)+" ")])}),0)]),A("div",{staticClass:"detail-section risks"},[A("div",{staticClass:"section-title"},[A("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.risks")))])],1),A("ul",{staticClass:"detail-list"},C._l(C.result.risks,function(t,a){return A("li",{key:"k-"+a},[C._v(" "+C._s(t)+" ")])}),0)])]),C.result.indicators&&Object.keys(C.result.indicators).length>0?A("div",{staticClass:"indicators-section"},[A("div",{staticClass:"section-title"},[A("a-icon",{attrs:{type:"stock"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.indicators")))]),A("a-tag",{staticClass:"indicators-pro-badge",attrs:{color:"blue"}},[C._v(C._s(C.$t("fastAnalysis.indicatorsProBadge")))])],1),A("div",{staticClass:"indicators-methodology"},[A("a-icon",{attrs:{type:"experiment"}}),A("span",[C._v(C._s(C.$t("fastAnalysis.indicatorsProSubtitle")))])],1),A("div",{staticClass:"indicators-grid"},[C.result.indicators.rsi?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v("RSI (14)")]),A("div",{staticClass:"indicator-value",class:C.getRsiClass(C.result.indicators.rsi.value)},[C._v(" "+C._s(C.formatNumber(C.result.indicators.rsi.value,1))+" ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.translateSignal(C.result.indicators.rsi.signal)))])]):C._e(),C.result.indicators.macd?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v("MACD (12,26,9)")]),A("div",{staticClass:"indicator-value",class:"bullish"===C.result.indicators.macd.signal?"bullish":"bearish"===C.result.indicators.macd.signal?"bearish":""},[C._v(" "+C._s(C.translateTrend(C.result.indicators.macd.trend))+" ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.translateSignal(C.result.indicators.macd.signal)))])]):C._e(),C.result.indicators.moving_averages?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.maTrend")))]),A("div",{staticClass:"indicator-value",class:C.getMaTrendClass(C.result.indicators.moving_averages.trend)},[C._v(" "+C._s(C.translateTrend(C.result.indicators.moving_averages.trend))+" ")])]):C._e(),C.result.indicators.volatility&&null!=C.result.indicators.volatility.atr?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v("ATR (14)")]),A("div",{staticClass:"indicator-value",class:C.getVolatilityClass(C.result.indicators.volatility.level)},[C._v(" $"+C._s(C.formatPrice(C.result.indicators.volatility.atr))+" ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.atrTrueRange")))])]):C._e(),C.result.indicators.bollinger&&null!=C.result.indicators.bollinger.BB_width?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.bbWidth")))]),A("div",{staticClass:"indicator-value"},[C._v(C._s(C.formatNumber(C.result.indicators.bollinger.BB_width,2))+"%")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.bbWidthHint")))])]):C._e(),null!=C.result.indicators.price_position?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.rangePct20")))]),A("div",{staticClass:"indicator-value"},[C._v(C._s(C.formatNumber(C.result.indicators.price_position,1))+"%")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.rangePct20Hint")))])]):C._e(),null!=C.result.indicators.volume_ratio?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.volumeRatio")))]),A("div",{staticClass:"indicator-value",class:C.volumeRatioClass(C.result.indicators.volume_ratio)},[C._v(" "+C._s(C.formatNumber(C.result.indicators.volume_ratio,2))+"× ")]),A("div",{staticClass:"indicator-signal"},[C._v(C._s(C.$t("fastAnalysis.volumeRatioHint")))])]):C._e(),C.result.indicators.levels?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.support")))]),A("div",{staticClass:"indicator-value"},[C._v("$"+C._s(C.formatPrice(C.result.indicators.levels.support)))])]):C._e(),C.result.indicators.levels?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.resistance")))]),A("div",{staticClass:"indicator-value"},[C._v("$"+C._s(C.formatPrice(C.result.indicators.levels.resistance)))])]):C._e(),C.result.indicators.volatility?A("div",{staticClass:"indicator-item"},[A("div",{staticClass:"indicator-name"},[C._v(C._s(C.$t("fastAnalysis.volatility")))]),A("div",{staticClass:"indicator-value",class:C.getVolatilityClass(C.result.indicators.volatility.level)},[C._v(" "+C._s(C.translateVolatility(C.result.indicators.volatility.level))+" ("+C._s(C.result.indicators.volatility.pct)+"%) ")])]):C._e()]),C.professionalIndicatorRows.length?A("div",{staticClass:"indicators-pro-wrap"},[A("div",{staticClass:"indicators-pro-title"},[A("a-icon",{attrs:{type:"deployment-unit"}}),C._v(" "+C._s(C.$t("fastAnalysis.indicatorsProTableTitle"))+" ")],1),A("a-descriptions",{staticClass:"indicators-pro-desc",attrs:{bordered:"",size:"small",column:2}},C._l(C.professionalIndicatorRows,function(t){return A("a-descriptions-item",{key:t.key,attrs:{label:t.label}},[A("span",{class:t.valueClass},[C._v(C._s(t.text))])])}),1)],1):C._e()]):C._e(),A("div",{staticClass:"feedback-section"},[A("div",{staticClass:"feedback-question"},[C._v(C._s(C.$t("fastAnalysis.wasHelpful")))]),A("div",{staticClass:"feedback-buttons"},[A("a-button",{attrs:{type:"helpful"===C.userFeedback?"primary":"default",size:"small",loading:"helpful"===C.feedbackLoading},on:{click:function(t){return C.submitFeedback("helpful")}}},[A("a-icon",{attrs:{type:"like"}}),C._v(" "+C._s(C.$t("fastAnalysis.helpful"))+" ")],1),A("a-button",{attrs:{type:"not_helpful"===C.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===C.feedbackLoading},on:{click:function(t){return C.submitFeedback("not_helpful")}}},[A("a-icon",{attrs:{type:"dislike"}}),C._v(" "+C._s(C.$t("fastAnalysis.notHelpful"))+" ")],1)],1),A("div",{staticClass:"analysis-meta"},[A("span",[C._v(C._s(C.$t("fastAnalysis.analysisTime"))+": "+C._s(C.result.analysis_time_ms)+"ms")]),C.result.memory_id?A("span",[C._v("ID: #"+C._s(C.result.memory_id))]):C._e()])])]):A("div",{staticClass:"empty-container"},[A("div",{staticClass:"empty-content"},[A("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),A("div",{staticClass:"empty-title"},[C._v(C._s(C.$t("fastAnalysis.selectSymbol")))]),A("div",{staticClass:"empty-hint"},[C._v(C._s(C.$t("fastAnalysis.selectHint")))])],1)])])},w=[],$={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,m.A)((0,m.A)({},(0,h.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),a=this.elapsedSeconds%60;return"".concat(t,"m ").concat(a,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,a=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return a>=70?"#52c41a":a>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,a=null===(t=this.result)||void 0===t?void 0:t.consensus;return a&&"object"===(0,n.A)(a)?null==a.consensus_decision&&null==a.consensus_score?null:a:null},tradingPlan:function(){var t,a,s,e,i,n,r=(null===(t=this.result)||void 0===t?void 0:t.trading_plan)||{},o=null!==(a=r.entry_price)&&void 0!==a?a:r.entryPrice,l=null!==(s=null!==(e=r.stop_loss)&&void 0!==e?e:r.stopLoss)&&void 0!==s?s:r.loss_exit_price,c=null!==(i=null!==(n=r.take_profit)&&void 0!==n?n:r.takeProfit)&&void 0!==i?i:r.profit_target_price;return{entry_price:o,stop_loss:l,take_profit:c}},trendOutlookRaw:function(){var t,a;return(null===(t=this.result)||void 0===t?void 0:t.trend_outlook)||(null===(a=this.result)||void 0===a?void 0:a.trendOutlook)||null},trendOutlookSummaryText:function(){var t,a,s=(null===(t=this.result)||void 0===t?void 0:t.trend_outlook_summary)||(null===(a=this.result)||void 0===a?void 0:a.trendOutlookSummary);return s&&String(s).trim()?String(s).trim():""},trendOutlookBlocks:function(){var t=this,a=this.trendOutlookRaw;if(!a||"object"!==(0,n.A)(a))return[];var s=[{key:"next_24h",labelKey:"fastAnalysis.outlook24h"},{key:"next_3d",labelKey:"fastAnalysis.outlook3d"},{key:"next_1w",labelKey:"fastAnalysis.outlook1w"},{key:"next_1m",labelKey:"fastAnalysis.outlook1m"}];return s.map(function(s){var e=s.key,i=s.labelKey,n=a[e]||{};return{key:e,label:t.$t(i),trend:n.trend,score:n.score,strength:n.strength}}).filter(function(t){var s=a[t.key];return s&&"object"===(0,n.A)(s)&&(null!=s.trend||null!=s.score)})},stopLossHintText:function(){var t,a=String((null===(t=this.result)||void 0===t?void 0:t.decision)||"").toUpperCase();return"SELL"===a?this.$t("fastAnalysis.stopLossHintShort"):this.$t("fastAnalysis.stopLossHint")},takeProfitHintText:function(){var t,a=String((null===(t=this.result)||void 0===t?void 0:t.decision)||"").toUpperCase();return"SELL"===a?this.$t("fastAnalysis.takeProfitHintShort"):this.$t("fastAnalysis.takeProfitHint")},professionalIndicatorRows:function(){var t,a=(null===(t=this.result)||void 0===t?void 0:t.indicators)||{},s=[],e=function(t,a,e){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";void 0!==e&&null!==e&&""!==e&&s.push({key:t,label:a,text:String(e),valueClass:i})},i=a.macd||{};if(null!=i.value&&e("macd_dif",this.$t("fastAnalysis.macdDif"),this.formatCompactNum(i.value)),null!=i.signal_line&&e("macd_dea",this.$t("fastAnalysis.macdDea"),this.formatCompactNum(i.signal_line)),null!=i.histogram){var n=Number(i.histogram),r=n>0?"bullish":n<0?"bearish":"";e("macd_hist",this.$t("fastAnalysis.macdHist"),this.formatCompactNum(i.histogram),r)}var o=a.moving_averages||{};null!=o.ma5&&e("ma5",this.$t("fastAnalysis.ma5Label"),"$"+this.formatPrice(o.ma5)),null!=o.ma10&&e("ma10",this.$t("fastAnalysis.ma10Label"),"$"+this.formatPrice(o.ma10)),null!=o.ma20&&e("ma20",this.$t("fastAnalysis.ma20Label"),"$"+this.formatPrice(o.ma20));var l=a.bollinger||{};null!=l.BB_upper&&e("bb_u",this.$t("fastAnalysis.bbUpper"),"$"+this.formatPrice(l.BB_upper)),null!=l.BB_middle&&e("bb_m",this.$t("fastAnalysis.bbMiddle"),"$"+this.formatPrice(l.BB_middle)),null!=l.BB_lower&&e("bb_l",this.$t("fastAnalysis.bbLower"),"$"+this.formatPrice(l.BB_lower)),null!=l.BB_width&&e("bb_w",this.$t("fastAnalysis.bbWidthPct"),this.formatNumber(l.BB_width,2)+"%");var c=a.levels||{};null!=c.pivot&&e("piv",this.$t("fastAnalysis.pivotStd"),"$"+this.formatPrice(c.pivot)),null!=c.s1&&e("s1",this.$t("fastAnalysis.levelS1"),"$"+this.formatPrice(c.s1)),null!=c.r1&&e("r1",this.$t("fastAnalysis.levelR1"),"$"+this.formatPrice(c.r1)),null!=c.s2&&e("s2",this.$t("fastAnalysis.levelS2"),"$"+this.formatPrice(c.s2)),null!=c.r2&&e("r2",this.$t("fastAnalysis.levelR2"),"$"+this.formatPrice(c.r2)),null!=c.swing_high&&e("sw_h",this.$t("fastAnalysis.swingHigh20"),"$"+this.formatPrice(c.swing_high)),null!=c.swing_low&&e("sw_l",this.$t("fastAnalysis.swingLow20"),"$"+this.formatPrice(c.swing_low));var d=a.volatility||{};if(null!=d.atr){var u=null!=d.pct?this.formatNumber(d.pct,2)+"% ATR/Price":"";e("atr14",this.$t("fastAnalysis.atr14Label"),"$"+this.formatPrice(d.atr)+(u?" · "+u:""))}var m=a.trading_levels||{};return null!=m.risk_reward_ratio&&Number(m.risk_reward_ratio)>0&&e("rr",this.$t("fastAnalysis.rrLongRef"),"1 : "+this.formatNumber(m.risk_reward_ratio,2)),null!=a.current_price&&e("cref",this.$t("fastAnalysis.refClose"),"$"+this.formatPrice(a.current_price)),s},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a<1?a.toFixed(6):a<100?a.toFixed(4):a<1e4?a.toFixed(2):a.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s.toFixed(a)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var a=Number(t);return Number.isNaN(a)?"--":a.toFixed(1)},formatAgreementPct:function(t){var a=Number(t);return Number.isNaN(a)?"--":"".concat(Math.round(100*a),"%")},formatProgress:function(t){var a=parseFloat(t)||0;return a%1===0?a.toFixed(0):a.toFixed(1)},formatOutlookTrend:function(t){var a=String(t||"HOLD").toUpperCase();return"BUY"===a?this.$t("fastAnalysis.outlookBull"):"SELL"===a?this.$t("fastAnalysis.outlookBear"):this.$t("fastAnalysis.outlookNeutral")},outlookTrendClass:function(t){var a=String(t||"").toUpperCase();return"BUY"===a?"trend-bull":"SELL"===a?"trend-bear":"trend-neutral"},formatCompactNum:function(t){var a=parseFloat(t);return Number.isNaN(a)?"--":0!==a&&Math.abs(a)<1e-4?a.toExponential(2):Math.abs(a)<1?a.toFixed(6):Math.abs(a)<100?a.toFixed(4):a.toFixed(2)},volumeRatioClass:function(t){var a=parseFloat(t);return Number.isNaN(a)?"":a>=1.5?"bullish":a<=.65?"bearish":""},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var a="fastAnalysis.signal.".concat(t),s=this.$t(a);return s===a?t:s},translateTrend:function(t){if(!t)return"--";var a="fastAnalysis.trend.".concat(t),s=this.$t(a);return s===a?t:s},translateVolatility:function(t){if(!t)return"--";var a="fastAnalysis.volatilityLevel.".concat(t),s=this.$t(a);return s===a?t:s},submitFeedback:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(null!==(e=a.result)&&void 0!==e&&e.memory_id){s.n=1;break}return a.$message.warning(a.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),s.a(2);case 1:return a.feedbackLoading=t,s.p=2,s.n=3,C({memory_id:a.result.memory_id,feedback:t});case 3:a.userFeedback=t,a.$message.success(a.$t("fastAnalysis.feedbackThanks")),s.n=5;break;case 4:s.p=4,s.v,a.$message.error(a.$t("fastAnalysis.feedbackFailed"));case 5:return s.p=5,a.feedbackLoading=null,s.f(5);case 6:return s.a(2)}},s,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var a=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-a)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},T=$,x=s(845),M=(0,x.A)(T,S,w,!1,null,"75da11ec",null),P=M.exports,F={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:P},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,currentTaskId:null,taskPollingTimer:null,taskPollingStartedAt:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1,positions:[],monitors:[],positionSummaryMap:{},showPositionModal:!1,showMonitorModal:!1,targetStockForOps:null,positionForm:{side:"long",quantity:null,entryPrice:null},monitorForm:{interval_min:240,notify_channels:[]},batchMode:!1,batchSelectedKeys:[],batchRunning:!1,batchProgress:0,showBatchScheduleModal:!1,batchScheduleForm:{interval_min:240,notify_channels:[]},showTaskDrawer:!1,showEditTaskModal:!1,editTaskLoading:!1,editTaskId:null,editTaskForm:{name:"",interval_min:240,notify_channels:[]}}},computed:(0,m.A)((0,m.A)((0,m.A)({},(0,h.L8)(["userInfo"])),(0,h.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo},watchlistTotalPnl:function(){return Object.values(this.positionSummaryMap).reduce(function(t,a){return t+(Number(a.pnl)||0)},0)},watchlistPositionCount:function(){return Object.values(this.positionSummaryMap).filter(function(t){return t.quantity>0}).length},watchlistTaskCount:function(){return Object.values(this.positionSummaryMap).reduce(function(t,a){return t+(a.monitorCount||0)},0)},batchSelectedAll:function(){return this.watchlist&&this.watchlist.length>0&&this.batchSelectedKeys.length===this.watchlist.length},batchIndeterminate:function(){return this.batchSelectedKeys.length>0&&this.batchSelectedKeys.length<(this.watchlist||[]).length}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadPositionData(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer),this.taskPollingTimer&&(clearInterval(this.taskPollingTimer),this.taskPollingTimer=null)},methods:{stopTaskPolling:function(){this.taskPollingTimer&&(clearInterval(this.taskPollingTimer),this.taskPollingTimer=null),this.currentTaskId=null,this.taskPollingStartedAt=0},pollTaskResult:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.currentTaskId){a.n=1;break}return a.a(2);case 1:return a.p=1,a.n=2,_({page:1,pagesize:50});case 2:if(s=a.v,s&&1===s.code&&s.data){a.n=3;break}return a.a(2);case 3:if(e=s.data.list||[],i=e.find(function(a){return Number(a.id)===Number(t.currentTaskId)}),i){a.n=4;break}return a.a(2);case 4:if(n=String(i.status||"").toLowerCase(),"completed"!==n){a.n=8;break}if(!i.full_result){a.n=5;break}t.analysisResult=i.full_result,a.n=6;break;case 5:return a.n=6,t.viewHistoryResult(i);case 6:return t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),a.n=7,t.refreshUserInfoFromServer();case 7:t.analyzing=!1,t.stopTaskPolling(),a.n=11;break;case 8:if("failed"!==n){a.n=10;break}return t.analysisError=i.error_message||t.$t("dashboard.analysis.message.analysisFailed"),t.analysisErrorTone="error",t.$message.error(t.analysisError),a.n=9,t.refreshUserInfoFromServer();case 9:t.analyzing=!1,t.stopTaskPolling(),a.n=11;break;case 10:Date.now()-t.taskPollingStartedAt>18e4&&(t.$message.warning(t.$t("fastAnalysis.analysisStillProcessing")||"任务仍在处理中,请稍后在历史记录查看"),t.analyzing=!1,t.stopTaskPolling());case 11:a.n=13;break;case 12:a.p=12,a.v;case 13:return a.a(2)}},a,null,[[1,12]])}))()},startTaskPolling:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){return(0,d.A)().w(function(s){while(1)switch(s.n){case 0:return a.stopTaskPolling(),a.currentTaskId=Number(t),a.taskPollingStartedAt=Date.now(),s.n=1,a.pollTaskResult();case 1:a.taskPollingTimer=setInterval(function(){a.pollTaskResult()},2500);case 2:return s.a(2)}},s)}))()},filterSymbolOption:function(t,a){var s,e=(null===(s=a.componentOptions)||void 0===s||null===(s=s.propsData)||void 0===s?void 0:s.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var a=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){a.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},hasMonitorForStock:function(t){if(!t)return!1;var a="".concat(t.market,":").concat(t.symbol),s=this.positionSummaryMap[a];return!!(s&&s.monitorCount>0)},getMonitorMeta:function(t){if(!t)return null;var a="".concat(t.market,":").concat(t.symbol),s=this.positionSummaryMap[a];return!s||s.monitorCount<=0?null:{activeCount:s.activeMonitorCount||0,nextRunAtText:s.nextRunAtText||""}},getPnlBarStyle:function(t){var a=Math.abs(Number((null===t||void 0===t?void 0:t.pnlPercent)||0)),s=Math.min(100,Math.max(4,a));return{width:"".concat(s,"%")}},_formatNextRunText:function(t){if(!t)return"";try{var a=new Date(t);return Number.isNaN(a.getTime())?"":a.toLocaleString(this.isZhLocale?"zh-CN":"en-US",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch(s){return""}},buildPositionSummary:function(){var t=this,a={},s=Array.isArray(this.positions)?this.positions:[],e=Array.isArray(this.monitors)?this.monitors:[],i=new Set,n={};s.forEach(function(t){n[Number(t.id)]="".concat(t.market,":").concat(t.symbol)}),e.forEach(function(s){var e=Array.isArray(s.position_ids)?s.position_ids:[];e.forEach(function(t){return i.add(Number(t))});var r=!!s.is_active,o=s.next_run_at||"";e.forEach(function(s){var e=n[Number(s)];e&&(a[e]||(a[e]={quantity:0,weightedEntry:0,pnl:0,marketValue:0,monitorCount:0,activeMonitorCount:0,nextRunAtText:""}),a[e].monitorCount+=1,r&&(a[e].activeMonitorCount+=1),!a[e].nextRunAtText&&o&&(a[e].nextRunAtText=t._formatNextRunText(o)))})}),s.forEach(function(t){var s="".concat(t.market,":").concat(t.symbol),e=Number(t.quantity||0),n=Number(t.entry_price||0);a[s]||(a[s]={quantity:0,weightedEntry:0,pnl:0,marketValue:0,monitorCount:0,activeMonitorCount:0,nextRunAtText:""}),a[s].quantity+=e,a[s].weightedEntry+=e*n,a[s].pnl+=Number(t.pnl||0),a[s].marketValue+=Number(t.market_value||0),i.has(Number(t.id))&&(a[s].monitorCount+=1)}),Object.keys(a).forEach(function(t){var s=a[t];s.avgEntry=s.quantity>0?s.weightedEntry/s.quantity:0;var e=s.quantity>0?s.weightedEntry:0;s.pnlPercent=e>0?s.pnl/e*100:0}),this.positionSummaryMap=a},toggleStockMonitor:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i,n,r,o,l;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(e="".concat(t.market,":").concat(t.symbol),i=(a.positions||[]).filter(function(t){return"".concat(t.market,":").concat(t.symbol)===e}).map(function(t){return Number(t.id)}).filter(Boolean),0!==i.length){s.n=1;break}return s.a(2);case 1:if(n=(a.monitors||[]).filter(function(t){var a=Array.isArray(t.position_ids)?t.position_ids.map(function(t){return Number(t)}):[];return a.some(function(t){return i.includes(t)})}),0!==n.length){s.n=2;break}return s.a(2);case 2:return r=!n.some(function(t){return!!t.is_active}),s.p=3,s.n=4,Promise.all(n.map(function(t){return(0,y.sk)(t.id,{is_active:r})}));case 4:return a.$message.success(r?a.$t("aiAssetAnalysis.monitor.enabled")||"已启用任务":a.$t("aiAssetAnalysis.monitor.disabled")||"已暂停任务"),s.n=5,a.loadPositionData();case 5:s.n=7;break;case 6:s.p=6,l=s.v,a.$message.error((null===l||void 0===l||null===(o=l.response)||void 0===o||null===(o=o.data)||void 0===o?void 0:o.msg)||(null===l||void 0===l?void 0:l.message)||"Toggle monitor failed");case 7:return s.a(2)}},s,null,[[3,6]])}))()},loadPositionData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,Promise.all([(0,y.Dt)(),(0,y.w1)()]);case 1:s=a.v,e=(0,c.A)(s,2),i=e[0],n=e[1],t.positions=i&&1===i.code&&i.data||[],t.monitors=n&&1===n.code&&n.data||[],t.buildPositionSummary(),a.n=3;break;case 2:a.p=2,a.v,t.positions=[],t.monitors=[],t.positionSummaryMap={};case 3:return a.a(2)}},a,null,[[0,2]])}))()},openPositionModal:function(t){this.targetStockForOps=t;var a="".concat(t.market,":").concat(t.symbol),s=(this.positions||[]).find(function(t){return"".concat(t.market,":").concat(t.symbol)===a});if(s){var e=Number(s.quantity||0);this.positionForm={side:s.side||(e<0?"short":"long"),quantity:Math.abs(e)||null,entryPrice:Number(s.entry_price||0)||null}}else this.positionForm={side:"long",quantity:null,entryPrice:null};this.showPositionModal=!0},savePosition:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=t.targetStockForOps,s){a.n=1;break}return a.a(2);case 1:if(e=Number(t.positionForm.quantity||0),i=Number(t.positionForm.entryPrice||0),e>0&&i>0){a.n=2;break}return t.$message.warning(t.$i18n&&"zh-CN"===t.$i18n.locale?"请输入有效的数量和买入单价":"Please enter valid quantity and entry price"),a.a(2);case 2:return a.p=2,a.n=3,(0,y.Ps)({market:s.market,symbol:s.symbol,name:s.name||s.symbol,side:t.positionForm.side||"long",quantity:e,entry_price:i});case 3:if(n=a.v,!n||1!==n.code){a.n=5;break}return t.$message.success(t.$t("portfolio.positions.add")+" OK"),t.showPositionModal=!1,a.n=4,t.loadPositionData();case 4:a.n=6;break;case 5:t.$message.error((null===n||void 0===n?void 0:n.msg)||"Add position failed");case 6:a.n=8;break;case 7:a.p=7,o=a.v,t.$message.error((null===o||void 0===o||null===(r=o.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.msg)||(null===o||void 0===o?void 0:o.message)||"Add position failed");case 8:return a.a(2)}},a,null,[[2,7]])}))()},openMonitorModal:function(t){this.targetStockForOps=t,this.monitorForm={interval_min:240,notify_channels:[]},this.showMonitorModal=!0},saveMonitorTask:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o,l,c;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=t.targetStockForOps,s){a.n=1;break}return a.a(2);case 1:return e="".concat(s.market,":").concat(s.symbol),i=t.monitorForm.interval_min,n=t.monitorForm.notify_channels||[],r=(t.positions||[]).filter(function(t){return"".concat(t.market,":").concat(t.symbol)===e}).map(function(t){return Number(t.id)}).filter(Boolean),a.p=2,a.n=3,(0,y.yr)({name:"AI-".concat(s.symbol,"-").concat(i,"m"),position_ids:r,monitor_type:"ai",config:{run_interval_minutes:i,symbol:s.symbol,market:s.market},notification_config:{channels:n},is_active:!0});case 3:if(o=a.v,!o||1!==o.code){a.n=5;break}return t.$message.success(t.$t("aiAssetAnalysis.monitor.created")),t.showMonitorModal=!1,a.n=4,t.loadPositionData();case 4:a.n=6;break;case 5:t.$message.error((null===o||void 0===o?void 0:o.msg)||"Create monitor failed");case 6:a.n=8;break;case 7:a.p=7,c=a.v,t.$message.error((null===c||void 0===c||null===(l=c.response)||void 0===l||null===(l=l.data)||void 0===l?void 0:l.msg)||(null===c||void 0===c?void 0:c.message)||"Create monitor failed");case 8:return a.a(2)}},a,null,[[2,7]])}))()},toggleBatchMode:function(){this.batchMode=!this.batchMode,this.batchMode||(this.batchSelectedKeys=[])},onBatchSelectAll:function(t){t.target.checked?this.batchSelectedKeys=(this.watchlist||[]).map(function(t){return"".concat(t.market,":").concat(t.symbol)}):this.batchSelectedKeys=[]},onBatchItemToggle:function(t,a){var s="".concat(t.market,":").concat(t.symbol);a.target.checked?this.batchSelectedKeys.includes(s)||this.batchSelectedKeys.push(s):this.batchSelectedKeys=this.batchSelectedKeys.filter(function(t){return t!==s})},openBatchScheduleModal:function(){0!==this.batchSelectedKeys.length&&(this.batchScheduleForm={interval_min:240,notify_channels:[]},this.showBatchScheduleModal=!0)},saveBatchSchedule:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,u,m,h,p;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=(0,l.A)(t.batchSelectedKeys),0!==s.length){a.n=1;break}return a.a(2);case 1:t.batchRunning=!0,e=t.batchScheduleForm.interval_min,i=t.batchScheduleForm.notify_channels||[],n=0,u=(0,o.A)(s),a.p=2,h=(0,d.A)().m(function a(){var s,r,o,l,u,h,p;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s=m.value,r=s.split(":"),o=(0,c.A)(r,2),l=o[0],u=o[1],h=(t.watchlist||[]).find(function(t){return t.market===l&&t.symbol===u}),h){a.n=1;break}return a.a(2,1);case 1:return p=(t.positions||[]).filter(function(t){return"".concat(t.market,":").concat(t.symbol)===s}).map(function(t){return Number(t.id)}).filter(Boolean),a.p=2,a.n=3,(0,y.yr)({name:"AI-".concat(u,"-").concat(e,"m"),position_ids:p,monitor_type:"ai",config:{run_interval_minutes:e,symbol:u,market:l},notification_config:{channels:i},is_active:!0});case 3:n++,a.n=5;break;case 4:a.p=4,a.v;case 5:return a.a(2)}},a,null,[[2,4]])}),u.s();case 3:if((m=u.n()).done){a.n=6;break}return a.d((0,r.A)(h()),4);case 4:if(!a.v){a.n=5;break}return a.a(3,5);case 5:a.n=3;break;case 6:a.n=8;break;case 7:a.p=7,p=a.v,u.e(p);case 8:return a.p=8,u.f(),a.f(8);case 9:return t.batchRunning=!1,t.showBatchScheduleModal=!1,t.batchMode=!1,t.batchSelectedKeys=[],a.n=10,t.loadPositionData();case 10:t.$message.success(t.$t("aiAssetAnalysis.batch.done")+" (".concat(n,"/").concat(s.length,")"));case 11:return a.a(2)}},a,null,[[2,7,8,9]])}))()},formatIntervalText:function(t){return t>=1440?"".concat(Math.round(t/1440),"d"):t>=60?"".concat(Math.round(t/60),"h"):"".concat(t,"m")},handleToggleTask:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,y.sk)(t.id,{is_active:!t.is_active});case 1:return a.$message.success(t.is_active?a.$t("aiAssetAnalysis.tasks.paused"):a.$t("aiAssetAnalysis.tasks.resumed")),s.n=2,a.loadPositionData();case 2:s.n=4;break;case 3:s.p=3,i=s.v,a.$message.error((null===i||void 0===i||null===(e=i.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||(null===i||void 0===i?void 0:i.message)||"Failed");case 4:return s.a(2)}},s,null,[[0,3]])}))()},handleEditTask:function(t){this.editTaskId=t.id,this.editTaskForm={name:t.name||"",interval_min:t.config&&t.config.run_interval_minutes||240,notify_channels:t.notification_config&&t.notification_config.channels||[]},this.showEditTaskModal=!0},saveEditTask:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.editTaskId){a.n=1;break}return a.a(2);case 1:return t.editTaskLoading=!0,a.p=2,a.n=3,(0,y.sk)(t.editTaskId,{name:t.editTaskForm.name,config:{run_interval_minutes:t.editTaskForm.interval_min},notification_config:{channels:t.editTaskForm.notify_channels}});case 3:return t.$message.success("OK"),t.showEditTaskModal=!1,a.n=4,t.loadPositionData();case 4:a.n=6;break;case 5:a.p=5,e=a.v,t.$message.error((null===e||void 0===e||null===(s=e.response)||void 0===s||null===(s=s.data)||void 0===s?void 0:s.msg)||(null===e||void 0===e?void 0:e.message)||"Failed");case 6:return a.p=6,t.editTaskLoading=!1,a.f(6);case 7:return a.a(2)}},a,null,[[2,5,6,7]])}))()},handleDeleteTask:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,y.ei)(t.id);case 1:return a.$message.success(a.$t("aiAssetAnalysis.tasks.deleted")),s.n=2,a.loadPositionData();case 2:s.n=4;break;case 3:s.p=3,i=s.v,a.$message.error((null===i||void 0===i||null===(e=i.response)||void 0===e||null===(e=e.data)||void 0===e?void 0:e.msg)||(null===i||void 0===i?void 0:i.message)||"Failed");case 4:return s.a(2)}},s,null,[[0,3]])}))()},loadMarketData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){return(0,d.A)().w(function(a){while(1)switch(a.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return a.a(2)}},a)}))()},loadSentimentData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingSentiment=!0,a.p=1,a.n=2,(0,A.EF)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&null!==s&&void 0!==s&&s.data&&(t.marketData.fearGreed=(null===(e=s.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=s.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(n=s.data.dxy)||void 0===n?void 0:n.value)||null),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingIndices=!0,a.p=1,a.n=2,(0,A.yI)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&null!==s&&void 0!==s&&s.data&&(t.marketData.indices=s.data.indices||[]),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingIndices=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingHeatmap=!0,a.p=1,a.n=2,(0,A.f$)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&null!==s&&void 0!==s&&s.data&&(t.marketData.heatmap={crypto:s.data.crypto||[],commodities:s.data.commodities||[],sectors:s.data.sectors||[],forex:s.data.forex||[]}),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.loadingCalendar=!0,a.p=1,a.n=2,(0,A.kF)();case 2:s=a.v,1===(null===s||void 0===s?void 0:s.code)&&(t.marketData.calendar=s.data||[]),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(a)},getHeatmapStyle:function(t){var a=parseFloat(t)||0,s=Math.min(Math.abs(a)/5,1),e=this.isDarkTheme;if(a>=0){var i=e?a>2?"#fff":"#4ade80":a>2?"#fff":"#166534";return{background:"rgba(34, 197, 94, ".concat(.15+.6*s,")"),color:i}}var n=e?a<-2?"#fff":"#f87171":a<-2?"#fff":"#991b1b";return{background:"rgba(239, 68, 68, ".concat(.15+.6*s,")"),color:n}},getCountryFlag:function(t){var a={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return a[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var a=new Date(t),s=new Date,e=new Date(s);if(e.setDate(e.getDate()+1),a.toDateString()===s.toDateString())return this.isZhLocale?"今天":"Today";if(a.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=a.getMonth()+1,n=a.getDate();return"".concat(i,"/").concat(n)}catch(r){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var a={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return a[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var a=Number(t);return Number.isNaN(a)?String(t):Number.isInteger(a)?String(a):a.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,p.ug)();case 1:s=a.v,s&&1===s.code&&s.data&&(t.localUserInfo=s.data,t.userId=s.data.id,t.$store.commit("SET_INFO",s.data)),a.n=3;break;case 2:a.p=2,a.v;case 3:return a.a(2)}},a,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o,l,u,h,p,v,y,f,b,_,k,C;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(!t.analyzing){a.n=1;break}return a.a(2);case 1:if(t.selectedSymbol){a.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),a.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",s=t.selectedSymbol.split(":"),e=(0,c.A)(s,2),i=e[0],n=e[1],r=t.$store.getters.lang||"zh-CN",o=!1,a.p=3,a.n=4,g({market:i,symbol:n,language:r,timeframe:"1D",async_submit:!0});case 4:if(l=a.v,!l||1!==l.code||!l.data){a.n=9;break}if("processing"!==l.data.status){a.n=6;break}return o=!0,u=l.data.remaining_credits,void 0!==u&&null!==u?t.$message.success(t.$t("fastAnalysis.analysisSubmittedWithCredits",{remaining:t.formatCreditNum(u)})):t.$message.success(t.$t("fastAnalysis.analysisSubmitted")||"任务已提交,正在分析中"),a.n=5,t.startTaskPolling(l.data.task_id);case 5:a.n=7;break;case 6:h=(0,m.A)({},l.data),delete h.credits_charged,delete h.remaining_credits,t.analysisResult=h,p=l.data.remaining_credits,void 0!==p&&null!==p?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(p)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete"));case 7:return a.n=8,t.refreshUserInfoFromServer();case 8:a.n=10;break;case 9:throw new Error((null===l||void 0===l?void 0:l.msg)||"分析失败");case 10:a.n=12;break;case 11:a.p=11,C=a.v,f=null===C||void 0===C||null===(v=C.response)||void 0===v?void 0:v.status,b=(null===C||void 0===C||null===(y=C.response)||void 0===y?void 0:y.data)||{},_=b.msg,k=b.data,429===f&&k&&k.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===f&&"Insufficient credits"===_?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===k||void 0===k?void 0:k.required),current:t.formatCreditNum(null===k||void 0===k?void 0:k.current),shortage:t.formatCreditNum(null===k||void 0===k?void 0:k.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=_||(null===C||void 0===C?void 0:C.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 12:return a.p=12,o||(t.analyzing=!1),a.f(12);case 13:return a.a(2)}},a,null,[[3,11,12,13]])}))()},loadHistoryList:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPage,pagesize:t.historyPageSize});case 2:s=a.v,s&&1===s.code&&s.data&&(t.historyList=s.data.list||[],t.historyTotal=s.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e,i,n,r;return(0,d.A)().w(function(s){while(1)switch(s.n){case 0:if("processing"!==(t.status||"").toLowerCase()){s.n=1;break}return a.$message.info(a.$t("fastAnalysis.analysisStillProcessing")||"该任务仍在处理中,请稍后刷新历史记录"),s.a(2);case 1:if(!t.full_result){s.n=2;break}return a.analysisResult=t.full_result,a.selectedSymbol="".concat(t.market,":").concat(t.symbol),a.showHistoryModal=!1,s.a(2);case 2:e=Number(t.price)||0,i=String(t.decision||"HOLD").toUpperCase(),n=null,r=null,e>0&&("SELL"===i?(n=1.05*e,r=.95*e):"BUY"===i&&(n=.95*e,r=1.05*e)),a.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:n,take_profit:r},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},a.selectedSymbol="".concat(t.market,":").concat(t.symbol),a.showHistoryModal=!1;case 3:return s.a(2)}},s)}))()},deleteHistoryItem:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,k(t.id);case 1:e=s.v,e&&1===e.code?(a.$message.success(a.$t("dashboard.analysis.message.deleteSuccess")),a.loadHistoryList()):a.$message.error((null===e||void 0===e?void 0:e.msg)||a.$t("dashboard.analysis.message.deleteFailed")),s.n=3;break;case 2:s.p=2,s.v,a.$message.error(a.$t("dashboard.analysis.message.deleteFailed"));case 3:return s.a(2)}},s,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var a=new Date(1e3*t);return a.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var a=new Date(t);return a.toLocaleString("zh-CN")},getStatusColor:function(t){var a={pending:"orange",processing:"blue",completed:"green",failed:"red"};return a[t]||"default"},getStatusText:function(t){var a={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},s=a[t];return s?this.$t(s):t},loadUserInfo:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.loadingUserInfo=!0,a.p=1,!t.storeUserInfo||!t.storeUserInfo.email){a.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),a.a(2);case 2:return a.n=3,(0,p.ug)();case 3:s=a.v,s&&1===s.code&&s.data&&(t.localUserInfo=s.data,t.userId=s.data.id,t.$store.commit("SET_INFO",s.data),t.loadWatchlist()),a.n=5;break;case 4:a.p=4,a.v;case 5:return a.p=5,t.loadingUserInfo=!1,a.f(5);case 6:return a.a(2)}},a,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.userId){a.n=1;break}return a.a(2);case 1:return t.loadingWatchlist=!0,a.p=2,a.n=3,(0,v.Qo)({userid:t.userId});case 3:if(s=a.v,!s||1!==s.code||!s.data){a.n=4;break}return t.watchlist=s.data.map(function(t){return(0,m.A)((0,m.A)({},t),{},{price:0,change:0,changePercent:0})}),a.n=4,t.loadWatchlistPrices();case 4:a.n=6;break;case 5:a.p=5,a.v;case 6:return a.p=6,t.loadingWatchlist=!1,a.f(6);case 7:return a.a(2)}},a,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t.watchlist&&0!==t.watchlist.length){a.n=1;break}return a.a(2);case 1:return a.p=1,s=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),a.n=2,(0,v.ms)({watchlist:s});case 2:e=a.v,e&&1===e.code&&e.data&&(i={},n={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,n["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=n,t.watchlist=t.watchlist.map(function(t){var a="".concat(t.market,"-").concat(t.symbol),s=i[a];return s?(0,m.A)((0,m.A)({},t),{},{price:s.price||0,change:s.change||0,changePercent:s.changePercent||0}):t})),a.n=4;break;case 3:a.p=3,a.v;case 4:return a.a(2)}},a,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s,e,i,n,r,o,l;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(s="",e="",i="",!t.selectedSymbolForAdd){a.n=1;break}s=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",a.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){a.n=3;break}if(t.selectedMarketTab){a.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:s=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",a.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),a.a(2);case 4:return t.addingStock=!0,a.p=5,a.n=6,(0,v.dp)({userid:t.userId,market:s,symbol:e,name:i});case 6:if(n=a.v,!n||1!==n.code){a.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),a.n=7,t.loadWatchlist();case 7:a.n=9;break;case 8:t.$message.error((null===n||void 0===n?void 0:n.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:a.n=11;break;case 10:a.p=10,l=a.v,o=(null===l||void 0===l||null===(r=l.response)||void 0===r||null===(r=r.data)||void 0===r?void 0:r.msg)||(null===l||void 0===l?void 0:l.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return a.p=11,t.addingStock=!1,a.f(11);case 12:return a.a(2)}},a,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var a=this,s=t.target.value;if(this.symbolSearchKeyword=s,this.searchTimer&&clearTimeout(this.searchTimer),!s||""===s.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){a.searchSymbolsInModal(s)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t&&""!==t.trim()){s.n=1;break}return a.symbolSearchResults=[],a.hasSearched=!1,s.a(2);case 1:if(a.selectedMarketTab){s.n=2;break}return a.$message.warning(a.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:return a.searchingSymbols=!0,a.hasSearched=!0,s.p=3,s.n=4,(0,v._3)({market:a.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=s.v,e&&1===e.code&&e.data&&e.data.length>0?a.symbolSearchResults=e.data:(a.symbolSearchResults=[],a.selectedSymbolForAdd={market:a.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),s.n=6;break;case 5:s.p=5,s.v,a.symbolSearchResults=[],a.selectedSymbolForAdd={market:a.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return s.p=6,a.searchingSymbols=!1,s.f(6);case 7:return s.a(2)}},s,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var a=this;return(0,u.A)((0,d.A)().m(function s(){var e;return(0,d.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t||(t=a.selectedMarketTab||(a.marketTypes.length>0?a.marketTypes[0].value:"")),t){s.n=1;break}return s.a(2);case 1:return a.loadingHotSymbols=!0,s.p=2,s.n=3,(0,v.z6)({market:t,limit:10});case 3:e=s.v,e&&1===e.code&&e.data?a.hotSymbols=e.data:a.hotSymbols=[],s.n=5;break;case 4:s.p=4,s.v,a.hotSymbols=[];case 5:return s.p=5,a.loadingHotSymbols=!1,s.f(5);case 6:return s.a(2)}},s,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var a=arguments,s=this;return(0,u.A)((0,d.A)().m(function e(){var i,r,o;return(0,d.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(s.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,n.A)(t)?t.symbol:t,r="object"===(0,n.A)(t)?t.market:a[1],e.p=2,e.n=3,(0,v.mk)({userid:s.userId,symbol:i,market:r});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return s.$message.success(s.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,s.loadWatchlist();case 4:e.n=6;break;case 5:s.$message.error((null===o||void 0===o?void 0:o.msg)||s.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,s.$message.error(s.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,u.A)((0,d.A)().m(function a(){var s;return(0,d.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,v.iO)();case 1:s=a.v,s&&1===s.code&&s.data&&Array.isArray(s.data)?t.marketTypes=s.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],a.n=3;break;case 2:a.p=2,a.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return a.a(2)}},a,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var a=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){a.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},N=F,I=(0,x.A)(N,e,i,!1,null,"5cbe52d9",null),D=I.exports},44146:function(t,a,s){s.d(a,{EF:function(){return l},f$:function(){return r},kF:function(){return o},r9:function(){return c},yI:function(){return n}});var e=s(75769),i="/api/global-market";function n(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function r(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},35038:function(t,a,s){s.d(a,{Qo:function(){return n},_3:function(){return d},dp:function(){return r},iO:function(){return c},mk:function(){return o},ms:function(){return l},z6:function(){return u}});var e=s(75769),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function n(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function r(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}},24364:function(t,a,s){s.d(a,{$p:function(){return o},Dt:function(){return i},Iw:function(){return v},Ps:function(){return n},Xg:function(){return r},_3:function(){return g},aU:function(){return h},bC:function(){return l},cg:function(){return y},ei:function(){return m},f:function(){return b},iO:function(){return _},qS:function(){return f},qu:function(){return p},sk:function(){return u},w1:function(){return c},yr:function(){return d}});var e=s(75769);function i(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,e.Ay)({url:"/api/portfolio/positions",method:"get",params:t})}function n(t){return(0,e.Ay)({url:"/api/portfolio/positions",method:"post",data:t})}function r(t,a){return(0,e.Ay)({url:"/api/portfolio/positions/".concat(t),method:"put",data:a})}function o(t){return(0,e.Ay)({url:"/api/portfolio/positions/".concat(t),method:"delete"})}function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,e.Ay)({url:"/api/portfolio/summary",method:"get",params:t})}function c(){return(0,e.Ay)({url:"/api/portfolio/monitors",method:"get"})}function d(t){return(0,e.Ay)({url:"/api/portfolio/monitors",method:"post",data:t})}function u(t,a){return(0,e.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"put",data:a})}function m(t){return(0,e.Ay)({url:"/api/portfolio/monitors/".concat(t),method:"delete"})}function h(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,e.Ay)({url:"/api/portfolio/monitors/".concat(t,"/run"),method:"post",data:a})}function p(){return(0,e.Ay)({url:"/api/portfolio/alerts",method:"get"})}function v(t){return(0,e.Ay)({url:"/api/portfolio/alerts",method:"post",data:t})}function y(t,a){return(0,e.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"put",data:a})}function f(t){return(0,e.Ay)({url:"/api/portfolio/alerts/".concat(t),method:"delete"})}function b(){return(0,e.Ay)({url:"/api/portfolio/groups",method:"get"})}function g(t){return(0,e.Ay)({url:"/api/market/symbols/search",method:"post",data:t})}function _(){return(0,e.Ay)({url:"/api/market/types",method:"get"})}},21560:function(t,a,s){s.d(a,{A:function(){return i}});s(52675),s(89463),s(2259),s(26099),s(47764),s(62953);var e=s(44735);function i(t){if(null!=t){var a=t["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],s=0;if(a)return a.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length))return{next:function(){return t&&s>=t.length&&(t=void 0),{value:t&&t[s++],done:!t}}}}throw new TypeError((0,e.A)(t)+" is not iterable")}}}]); \ No newline at end of file diff --git a/frontend/dist/js/811-legacy.47af9a60.js b/frontend/dist/js/811-legacy.47af9a60.js deleted file mode 100644 index 5162ac5..0000000 --- a/frontend/dist/js/811-legacy.47af9a60.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[811],{6811:function(t,e,a){a.r(e),a.d(e,{default:function(){return v}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-manage-page",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"page-header"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"team"}}),e("span",[t._v(t._s(t.$t("userManage.title")||"User Management"))])],1),e("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("userManage.description")||"Manage system users, roles and permissions"))])]),e("a-tabs",{staticClass:"manage-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"users",attrs:{tab:t.$t("userManage.tabUsers")||"User Management"}},[e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{attrs:{type:"primary"},on:{click:t.showCreateModal}},[e("a-icon",{attrs:{type:"user-add"}}),t._v(" "+t._s(t.$t("userManage.createUser")||"Create User")+" ")],1),e("a-button",{on:{click:t.loadUsers}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("userManage.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.columns,dataSource:t.users,loading:t.loading,pagination:t.pagination,rowKey:function(t){return t.id}},on:{change:t.handleTableChange},scopedSlots:t._u([{key:"status",fn:function(a){return[e("a-tag",{attrs:{color:"active"===a?"green":"red"}},[t._v(" "+t._s("active"===a?t.$t("userManage.active")||"Active":t.$t("userManage.disabled")||"Disabled")+" ")])]}},{key:"role",fn:function(a){return[e("a-tag",{attrs:{color:t.getRoleColor(a)}},[t._v(" "+t._s(t.getRoleLabel(a))+" ")])]}},{key:"last_login_at",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v(t._s(t.$t("userManage.neverLogin")||"Never"))])]}},{key:"credits",fn:function(a){return[e("span",{staticClass:"credits-value"},[t._v(t._s(t.formatCredits(a)))])]}},{key:"vip_expires_at",fn:function(a){return[a&&t.isVipActive(a)?[e("a-tag",{attrs:{color:"gold"}},[e("a-icon",{attrs:{type:"crown"}}),t._v(" "+t._s(t.formatDate(a))+" ")],1)]:e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"action",fn:function(a,s){return[e("a-space",[e("a-tooltip",{attrs:{title:t.$t("common.edit")||"Edit"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showEditModal(s)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.adjustCredits")||"Adjust Credits"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showCreditsModal(s)}}},[e("a-icon",{staticStyle:{color:"#722ed1"},attrs:{type:"wallet"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.setVip")||"Set VIP"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showVipModal(s)}}},[e("a-icon",{staticStyle:{color:"#faad14"},attrs:{type:"crown"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showResetPasswordModal(s)}}},[e("a-icon",{attrs:{type:"key"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("common.delete")||"Delete"}},[e("a-popconfirm",{attrs:{title:t.$t("userManage.confirmDelete")||"Are you sure to delete this user?"},on:{confirm:function(e){return t.handleDelete(s.id)}}},[e("a-button",{attrs:{type:"link",size:"small",disabled:s.id===t.currentUserId}},[e("a-icon",{staticStyle:{color:"#ff4d4f"},attrs:{type:"delete"}})],1)],1)],1)],1)]}}])})],1)],1),e("a-tab-pane",{key:"strategies",attrs:{tab:t.$t("systemOverview.tabTitle")||"System Overview"}},[t.strategySummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.total_strategies||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalStrategies")||"Total Strategies"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"play-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.running_strategies||0))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.strategySummary.running_live_strategies||0)+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.strategySummary.running_signal_strategies||0)+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.runningStrategies")||"Running"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.strategySummary.total_capital)))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatNumber(t.strategySummary.live_capital))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatNumber(t.strategySummary.signal_capital))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalCapital")||"Total Capital"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",style:{background:(t.strategySummary.total_pnl||0)>=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(81127),n=a(56252),o=a(76338),l=(a(2892),a(84841)),d=a(55434),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"49c4f239",null),v=g.exports},84841:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(75769);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/811.bdce7b14.js b/frontend/dist/js/811.bdce7b14.js deleted file mode 100644 index aa3f3e4..0000000 --- a/frontend/dist/js/811.bdce7b14.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[811],{6811:function(t,e,a){a.r(e),a.d(e,{default:function(){return v}});var s=function(){var t=this,e=t._self._c;return e("div",{staticClass:"user-manage-page",class:{"theme-dark":t.isDarkTheme}},[e("div",{staticClass:"page-header"},[e("h2",{staticClass:"page-title"},[e("a-icon",{attrs:{type:"team"}}),e("span",[t._v(t._s(t.$t("userManage.title")||"User Management"))])],1),e("p",{staticClass:"page-desc"},[t._v(t._s(t.$t("userManage.description")||"Manage system users, roles and permissions"))])]),e("a-tabs",{staticClass:"manage-tabs",on:{change:t.handleTabChange},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("a-tab-pane",{key:"users",attrs:{tab:t.$t("userManage.tabUsers")||"User Management"}},[e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{attrs:{type:"primary"},on:{click:t.showCreateModal}},[e("a-icon",{attrs:{type:"user-add"}}),t._v(" "+t._s(t.$t("userManage.createUser")||"Create User")+" ")],1),e("a-button",{on:{click:t.loadUsers}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("userManage.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleSearch,pressEnter:t.handleSearch},model:{value:t.searchKeyword,callback:function(e){t.searchKeyword=e},expression:"searchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.columns,dataSource:t.users,loading:t.loading,pagination:t.pagination,rowKey:function(t){return t.id}},on:{change:t.handleTableChange},scopedSlots:t._u([{key:"status",fn:function(a){return[e("a-tag",{attrs:{color:"active"===a?"green":"red"}},[t._v(" "+t._s("active"===a?t.$t("userManage.active")||"Active":t.$t("userManage.disabled")||"Disabled")+" ")])]}},{key:"role",fn:function(a){return[e("a-tag",{attrs:{color:t.getRoleColor(a)}},[t._v(" "+t._s(t.getRoleLabel(a))+" ")])]}},{key:"last_login_at",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v(t._s(t.$t("userManage.neverLogin")||"Never"))])]}},{key:"credits",fn:function(a){return[e("span",{staticClass:"credits-value"},[t._v(t._s(t.formatCredits(a)))])]}},{key:"vip_expires_at",fn:function(a){return[a&&t.isVipActive(a)?[e("a-tag",{attrs:{color:"gold"}},[e("a-icon",{attrs:{type:"crown"}}),t._v(" "+t._s(t.formatDate(a))+" ")],1)]:e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"action",fn:function(a,s){return[e("a-space",[e("a-tooltip",{attrs:{title:t.$t("common.edit")||"Edit"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showEditModal(s)}}},[e("a-icon",{attrs:{type:"edit"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.adjustCredits")||"Adjust Credits"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showCreditsModal(s)}}},[e("a-icon",{staticStyle:{color:"#722ed1"},attrs:{type:"wallet"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.setVip")||"Set VIP"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showVipModal(s)}}},[e("a-icon",{staticStyle:{color:"#faad14"},attrs:{type:"crown"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password"}},[e("a-button",{attrs:{type:"link",size:"small"},on:{click:function(e){return t.showResetPasswordModal(s)}}},[e("a-icon",{attrs:{type:"key"}})],1)],1),e("a-tooltip",{attrs:{title:t.$t("common.delete")||"Delete"}},[e("a-popconfirm",{attrs:{title:t.$t("userManage.confirmDelete")||"Are you sure to delete this user?"},on:{confirm:function(e){return t.handleDelete(s.id)}}},[e("a-button",{attrs:{type:"link",size:"small",disabled:s.id===t.currentUserId}},[e("a-icon",{staticStyle:{color:"#ff4d4f"},attrs:{type:"delete"}})],1)],1)],1)],1)]}}])})],1)],1),e("a-tab-pane",{key:"strategies",attrs:{tab:t.$t("systemOverview.tabTitle")||"System Overview"}},[t.strategySummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"fund"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.total_strategies||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalStrategies")||"Total Strategies"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"play-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.strategySummary.running_strategies||0))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.strategySummary.running_live_strategies||0)+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.strategySummary.running_signal_strategies||0)+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.runningStrategies")||"Running"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.strategySummary.total_capital)))]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatNumber(t.strategySummary.live_capital))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatNumber(t.strategySummary.signal_capital))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalCapital")||"Total Capital"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",style:{background:(t.strategySummary.total_pnl||0)>=0?"linear-gradient(135deg, #11998e, #38ef7d)":"linear-gradient(135deg, #ff416c, #ff4b2b)"}},[e("a-icon",{attrs:{type:"rise"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value",class:(t.strategySummary.total_pnl||0)>=0?"text-profit":"text-loss"},[t._v(" "+t._s(t.formatPnl(t.strategySummary.total_pnl))+" "),e("span",{staticClass:"roi-badge"},[t._v(t._s(t.strategySummary.total_roi||0)+"%")])]),e("div",{staticClass:"summary-sub"},[t._v(" "+t._s(t.$t("systemOverview.live")||"实盘")+": "+t._s(t.formatPnl(t.strategySummary.live_pnl))+" / "+t._s(t.$t("systemOverview.signal")||"仅通知")+": "+t._s(t.formatPnl(t.strategySummary.signal_pnl))+" ")]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("systemOverview.totalPnl")||"Total PnL"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadSystemStrategies}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleStrategyFilterChange},model:{value:t.strategyStatusFilter,callback:function(e){t.strategyStatusFilter=e},expression:"strategyStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("systemOverview.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"running"}},[t._v(t._s(t.$t("systemOverview.filterRunning")||"Running"))]),e("a-select-option",{attrs:{value:"stopped"}},[t._v(t._s(t.$t("systemOverview.filterStopped")||"Stopped"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("systemOverview.searchPlaceholder")||"Search strategy/symbol/user",allowClear:""},on:{search:t.handleStrategySearch,pressEnter:t.handleStrategySearch},model:{value:t.strategySearchKeyword,callback:function(e){t.strategySearchKeyword=e},expression:"strategySearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.strategyColumns,dataSource:t.systemStrategies,loading:t.strategyLoading,pagination:t.strategyPagination,rowKey:function(t){return t.id},scroll:{x:1600}},on:{change:t.handleStrategyTableChange},scopedSlots:t._u([{key:"strategyStatus",fn:function(a){return[e("span",{staticClass:"status-cell"},[e("span",{staticClass:"status-dot",class:"running"===a?"dot-running":"dot-stopped"}),e("span",{class:"running"===a?"status-running":"status-stopped"},[t._v(" "+t._s("running"===a?t.$t("systemOverview.running")||"Running":t.$t("systemOverview.stopped")||"Stopped")+" ")])])]}},{key:"userInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:s.nickname||s.username||"-"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)])]}},{key:"symbolInfo",fn:function(a,s){return[e("div",[e("span",{staticClass:"symbol-text"},[t._v(t._s(s.symbol||"-"))]),"cross_sectional"===s.cs_strategy_type?e("a-tag",{staticStyle:{"margin-left":"4px"},attrs:{color:"purple",size:"small"}},[t._v("CS")]):t._e()],1),"cross_sectional"===s.cs_strategy_type&&s.symbol_list&&s.symbol_list.length?e("div",{staticClass:"symbol-count text-muted"},[t._v(" "+t._s(s.symbol_list.length)+" "+t._s(t.$t("systemOverview.symbols")||"symbols")+" ")]):t._e()]}},{key:"capitalInfo",fn:function(a){return[e("span",[t._v(t._s(t.formatNumber(a)))])]}},{key:"pnlInfo",fn:function(a,s){return[e("div",{class:s.total_pnl>=0?"text-profit":"text-loss"},[e("span",{staticClass:"pnl-value"},[t._v(t._s(t.formatPnl(s.total_pnl)))]),e("span",{staticClass:"roi-text"},[t._v("("+t._s(s.roi>=0?"+":"")+t._s(s.roi)+"%)")])]),e("div",{staticClass:"pnl-detail text-muted"},[e("span",[t._v(t._s(t.$t("systemOverview.realized")||"Real")+": "+t._s(t.formatPnl(s.total_realized_pnl)))]),e("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(t.$t("systemOverview.unrealized")||"Unreal")+": "+t._s(t.formatPnl(s.total_unrealized_pnl)))])])]}},{key:"positionInfo",fn:function(t,a){return[e("a-badge",{attrs:{count:a.position_count,numberStyle:{backgroundColor:a.position_count>0?"#52c41a":"#d9d9d9"}}})]}},{key:"tradeInfo",fn:function(a){return[e("span",[t._v(t._s(a||0))])]}},{key:"indicatorInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"indicator-name"},[t._v(t._s(t.truncate(a,16)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"exchangeInfo",fn:function(a){return[a?e("span",{staticClass:"exchange-name"},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"timeframeInfo",fn:function(a){return[a?e("a-tag",{attrs:{size:"small"}},[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"leverageInfo",fn:function(a){return[a>1?e("span",{staticStyle:{color:"#fa8c16","font-weight":"600"}},[t._v(t._s(a)+"x")]):e("span",[t._v(t._s(a||1)+"x")])]}},{key:"createdAtInfo",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"orders",attrs:{tab:t.$t("adminOrders.tabTitle")||"Order List"}},[t.orderSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"file-text"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.total_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalOrders")||"Total Orders"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"check-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.paid_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.paidOrders")||"Paid"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"clock-circle"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.orderSummary.pending_orders||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.pendingOrders")||"Pending"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"dollar"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.formatNumber(t.orderSummary.total_revenue))+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("USDT")])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminOrders.totalRevenue")||"Total Revenue"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadOrders}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1),e("a-select",{staticStyle:{width:"140px"},on:{change:t.handleOrderFilterChange},model:{value:t.orderStatusFilter,callback:function(e){t.orderStatusFilter=e},expression:"orderStatusFilter"}},[e("a-select-option",{attrs:{value:"all"}},[t._v(t._s(t.$t("adminOrders.filterAll")||"All Status"))]),e("a-select-option",{attrs:{value:"pending"}},[t._v(t._s(t.$t("adminOrders.filterPending")||"Pending"))]),e("a-select-option",{attrs:{value:"paid"}},[t._v(t._s(t.$t("adminOrders.filterPaid")||"Paid"))]),e("a-select-option",{attrs:{value:"confirmed"}},[t._v(t._s(t.$t("adminOrders.filterConfirmed")||"Confirmed"))]),e("a-select-option",{attrs:{value:"expired"}},[t._v(t._s(t.$t("adminOrders.filterExpired")||"Expired"))])],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminOrders.searchPlaceholder")||"Search by username/email",allowClear:""},on:{search:t.handleOrderSearch,pressEnter:t.handleOrderSearch},model:{value:t.orderSearchKeyword,callback:function(e){t.orderSearchKeyword=e},expression:"orderSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("a-table",{attrs:{columns:t.orderColumns,dataSource:t.orders,loading:t.orderLoading,pagination:t.orderPagination,rowKey:function(t){return t.order_type+"-"+t.id},scroll:{x:1400}},on:{change:t.handleOrderTableChange},scopedSlots:t._u([{key:"orderUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.user_email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"orderTypeInfo",fn:function(a){return[e("a-tag",{attrs:{color:"usdt"===a?"green":"blue"}},[t._v(" "+t._s("usdt"===a?"USDT":"Mock")+" ")])]}},{key:"planInfo",fn:function(a){return[e("a-tag",{attrs:{color:"lifetime"===a?"gold":"yearly"===a?"purple":"cyan"}},[t._v(" "+t._s("lifetime"===a?t.$t("adminOrders.lifetime")||"Lifetime":"yearly"===a?t.$t("adminOrders.yearly")||"Yearly":t.$t("adminOrders.monthly")||"Monthly")+" ")])]}},{key:"amountInfo",fn:function(a,s){return[e("span",{staticStyle:{"font-weight":"600"}},[t._v(t._s(a))]),e("span",{staticClass:"text-muted",staticStyle:{"margin-left":"4px"}},[t._v(t._s(s.currency))])]}},{key:"orderStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:t.getOrderStatusColor(a)}},[t._v(t._s(t.getOrderStatusLabel(a)))])]}},{key:"chainInfo",fn:function(a){return[a?e("span",[t._v(t._s(a))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"addressInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"address-text"},[t._v(t._s(t.truncate(a,12)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"txHashInfo",fn:function(a){return[a?e("a-tooltip",{attrs:{title:a}},[e("span",{staticClass:"hash-text"},[t._v(t._s(t.truncate(a,14)))])]):e("span",{staticClass:"text-muted"},[t._v("-")])]}},{key:"orderCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1),e("a-tab-pane",{key:"aiStats",attrs:{tab:t.$t("adminAiStats.tabTitle")||"AI Analysis"}},[t.aiStatsSummary?e("div",{staticClass:"summary-cards"},[e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #667eea, #764ba2)"}},[e("a-icon",{attrs:{type:"thunderbolt"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.total_analyses||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.totalAnalyses")||"Total Analyses"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #11998e, #38ef7d)"}},[e("a-icon",{attrs:{type:"team"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_users||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.activeUsers")||"Active Users"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #f093fb, #f5576c)"}},[e("a-icon",{attrs:{type:"stock"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(t._s(t.aiStatsSummary.unique_symbols||0))]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.uniqueSymbols")||"Symbols Analyzed"))])])]),e("div",{staticClass:"summary-card"},[e("div",{staticClass:"summary-icon",staticStyle:{background:"linear-gradient(135deg, #fa709a, #fee140)"}},[e("a-icon",{attrs:{type:"like"}})],1),e("div",{staticClass:"summary-info"},[e("div",{staticClass:"summary-value"},[t._v(" "+t._s(t.aiStatsSummary.correct_count||0)+" "),e("span",{staticStyle:{"font-size":"13px",color:"#999"}},[t._v("/ "+t._s(t.aiStatsSummary.total_memory||0))])]),e("div",{staticClass:"summary-label"},[t._v(t._s(t.$t("adminAiStats.accuracy")||"Correct / Verified"))])])])]):t._e(),e("div",{staticClass:"toolbar"},[e("div",{staticClass:"toolbar-left"},[e("a-button",{on:{click:t.loadAiStats}},[e("a-icon",{attrs:{type:"reload"}}),t._v(" "+t._s(t.$t("common.refresh")||"Refresh")+" ")],1)],1),e("div",{staticClass:"toolbar-right"},[e("a-input-search",{staticStyle:{width:"280px"},attrs:{placeholder:t.$t("adminAiStats.searchPlaceholder")||"Search by username",allowClear:""},on:{search:t.handleAiStatsSearch,pressEnter:t.handleAiStatsSearch},model:{value:t.aiStatsSearchKeyword,callback:function(e){t.aiStatsSearchKeyword=e},expression:"aiStatsSearchKeyword"}})],1)]),e("a-card",{staticClass:"user-table-card",staticStyle:{"margin-bottom":"20px"},attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"bar-chart"}}),t._v(" "+t._s(t.$t("adminAiStats.userStatsTitle")||"Per-User Statistics")+" ")],1),e("a-table",{attrs:{columns:t.aiUserColumns,dataSource:t.aiUserStats,loading:t.aiStatsLoading,pagination:t.aiStatsPagination,rowKey:function(t){return t.user_id}},on:{change:t.handleAiStatsTableChange},scopedSlots:t._u([{key:"aiUserInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(s.nickname||s.username||"-")+" ("+(s.email||"")+")"}},[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",10)))])],1)])]}},{key:"analysisCountInfo",fn:function(a){return[e("span",{staticStyle:{"font-weight":"600",color:"#1890ff"}},[t._v(t._s(a||0))])]}},{key:"accuracyInfo",fn:function(a,s){return[e("span",{staticClass:"text-profit"},[t._v(t._s(s.correct||0))]),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticClass:"text-loss"},[t._v(t._s(s.incorrect||0))])]}},{key:"feedbackInfo",fn:function(a,s){return[e("a-tooltip",{attrs:{title:(t.$t("adminAiStats.helpful")||"Helpful")+" / "+(t.$t("adminAiStats.notHelpful")||"Not Helpful")}},[e("span",{staticStyle:{color:"#52c41a"}},[e("a-icon",{attrs:{type:"like"}}),t._v(" "+t._s(s.helpful||0))],1),e("span",{staticClass:"text-muted"},[t._v(" / ")]),e("span",{staticStyle:{color:"#ff4d4f"}},[e("a-icon",{attrs:{type:"dislike"}}),t._v(" "+t._s(s.not_helpful||0))],1)])]}},{key:"lastAnalysisAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1),e("a-card",{staticClass:"user-table-card",attrs:{bordered:!1}},[e("h4",{staticStyle:{"margin-bottom":"12px",color:"#1e3a5f","font-weight":"600"}},[e("a-icon",{staticStyle:{"margin-right":"8px"},attrs:{type:"history"}}),t._v(" "+t._s(t.$t("adminAiStats.recentTitle")||"Recent Analysis Records")+" ")],1),e("a-table",{attrs:{columns:t.aiRecentColumns,dataSource:t.aiRecentRecords,loading:t.aiStatsLoading,pagination:!1,rowKey:function(t){return t.id},size:"small"},scopedSlots:t._u([{key:"recentUserInfo",fn:function(a,s){return[e("span",{staticClass:"user-cell"},[e("a-avatar",{style:{backgroundColor:t.getUserColor(s.user_id),fontSize:"11px",marginRight:"6px"},attrs:{size:"small"}},[t._v(" "+t._s((s.nickname||s.username||"?").charAt(0).toUpperCase())+" ")]),e("span",{staticClass:"user-name"},[t._v(t._s(t.truncate(s.nickname||s.username||"-",8)))])],1)]}},{key:"recentStatusInfo",fn:function(a){return[e("a-tag",{attrs:{color:"completed"===a?"green":"failed"===a?"red":"blue"}},[t._v(" "+t._s(a)+" ")])]}},{key:"recentCreatedAt",fn:function(a){return[a?e("span",[t._v(t._s(t.formatTime(a)))]):e("span",{staticClass:"text-muted"},[t._v("-")])]}}])})],1)],1)],1),e("a-modal",{attrs:{title:t.isEdit?t.$t("userManage.editUser")||"Edit User":t.$t("userManage.createUser")||"Create User",confirmLoading:t.modalLoading},on:{ok:t.handleModalOk,cancel:t.handleModalCancel},model:{value:t.modalVisible,callback:function(e){t.modalVisible=e},expression:"modalVisible"}},[e("a-form",{attrs:{form:t.form,layout:"vertical"}},[e("a-form-item",{attrs:{label:t.$t("userManage.username")||"Username"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["username",{rules:[{required:!t.isEdit,message:t.$t("userManage.usernameRequired")||"Please enter username"}]}],expression:"['username', {\n rules: [{ required: !isEdit, message: $t('userManage.usernameRequired') || 'Please enter username' }]\n }]"}],attrs:{disabled:t.isEdit,placeholder:t.$t("userManage.usernamePlaceholder")||"Enter username"}},[e("a-icon",{attrs:{slot:"prefix",type:"user"},slot:"prefix"})],1)],1),t.isEdit?t._e():e("a-form-item",{attrs:{label:t.$t("userManage.password")||"Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.passwordPlaceholder")||"Enter password (min 6 characters)"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.nickname")||"Nickname"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["nickname"],expression:"['nickname']"}],attrs:{placeholder:t.$t("userManage.nicknamePlaceholder")||"Enter nickname"}},[e("a-icon",{attrs:{slot:"prefix",type:"smile"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.email")||"Email"}},[e("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:["email",{rules:[{type:"email",message:t.$t("userManage.emailInvalid")||"Invalid email format"}]}],expression:"['email', {\n rules: [{ type: 'email', message: $t('userManage.emailInvalid') || 'Invalid email format' }]\n }]"}],attrs:{placeholder:t.$t("userManage.emailPlaceholder")||"Enter email"}},[e("a-icon",{attrs:{slot:"prefix",type:"mail"},slot:"prefix"})],1)],1),e("a-form-item",{attrs:{label:t.$t("userManage.role")||"Role"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["role",{initialValue:"user"}],expression:"['role', { initialValue: 'user' }]"}],attrs:{placeholder:t.$t("userManage.rolePlaceholder")||"Select role"}},t._l(t.roles,function(a){return e("a-select-option",{key:a.id,attrs:{value:a.id}},[t._v(" "+t._s(t.getRoleLabel(a.id))+" ")])}),1)],1),t.isEdit?e("a-form-item",{attrs:{label:t.$t("userManage.status")||"Status"}},[e("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:["status",{initialValue:"active"}],expression:"['status', { initialValue: 'active' }]"}],attrs:{placeholder:t.$t("userManage.statusPlaceholder")||"Select status"}},[e("a-select-option",{attrs:{value:"active"}},[t._v(t._s(t.$t("userManage.active")||"Active"))]),e("a-select-option",{attrs:{value:"disabled"}},[t._v(t._s(t.$t("userManage.disabled")||"Disabled"))])],1)],1):t._e()],1)],1),e("a-modal",{attrs:{title:t.$t("userManage.resetPassword")||"Reset Password",confirmLoading:t.resetPasswordLoading},on:{ok:t.handleResetPassword},model:{value:t.resetPasswordVisible,callback:function(e){t.resetPasswordVisible=e},expression:"resetPasswordVisible"}},[e("a-form",{attrs:{form:t.resetPasswordForm,layout:"vertical"}},[e("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("userManage.resetPasswordWarning")||"This will reset the user's password",type:"warning",showIcon:""}}),e("a-form-item",{attrs:{label:t.$t("userManage.newPassword")||"New Password"}},[e("a-input-password",{directives:[{name:"decorator",rawName:"v-decorator",value:["new_password",{rules:[{required:!0,message:t.$t("userManage.passwordRequired")||"Please enter new password"},{min:6,message:t.$t("userManage.passwordMin")||"Password must be at least 6 characters"}]}],expression:"['new_password', {\n rules: [\n { required: true, message: $t('userManage.passwordRequired') || 'Please enter new password' },\n { min: 6, message: $t('userManage.passwordMin') || 'Password must be at least 6 characters' }\n ]\n }]"}],attrs:{placeholder:t.$t("userManage.newPasswordPlaceholder")||"Enter new password"}},[e("a-icon",{attrs:{slot:"prefix",type:"lock"},slot:"prefix"})],1)],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.adjustCredits")||"Adjust Credits")+(t.creditsEditingUser?" - ".concat(t.creditsEditingUser.username):""),confirmLoading:t.creditsLoading},on:{ok:t.handleSetCredits},model:{value:t.creditsModalVisible,callback:function(e){t.creditsModalVisible=e},expression:"creditsModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.creditsEditingUser?e("div",{staticClass:"current-credits-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentCredits")||"Current Credits")+":")]),e("span",{staticClass:"value"},[t._v(t._s(t.formatCredits(t.creditsEditingUser.credits)))])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.newCredits")||"New Credits"}},[e("a-input-number",{staticStyle:{width:"100%"},attrs:{min:0,precision:2,placeholder:t.$t("userManage.enterCredits")||"Enter new credits amount"},model:{value:t.newCredits,callback:function(e){t.newCredits=e},expression:"newCredits"}})],1),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.creditsRemark,callback:function(e){t.creditsRemark=e},expression:"creditsRemark"}})],1)],1)],1),e("a-modal",{attrs:{title:(t.$t("userManage.setVip")||"Set VIP")+(t.vipEditingUser?" - ".concat(t.vipEditingUser.username):""),confirmLoading:t.vipLoading},on:{ok:t.handleSetVip},model:{value:t.vipModalVisible,callback:function(e){t.vipModalVisible=e},expression:"vipModalVisible"}},[e("a-form",{attrs:{layout:"vertical"}},[t.vipEditingUser&&t.vipEditingUser.vip_expires_at?e("div",{staticClass:"current-vip-info"},[e("span",{staticClass:"label"},[t._v(t._s(t.$t("userManage.currentVip")||"Current VIP")+":")]),e("span",{staticClass:"value",class:t.isVipActive(t.vipEditingUser.vip_expires_at)?"active":"expired"},[t._v(" "+t._s(t.isVipActive(t.vipEditingUser.vip_expires_at)?(t.$t("userManage.vipActive")||"Active")+" (".concat(t.formatDate(t.vipEditingUser.vip_expires_at),")"):t.$t("userManage.vipExpired")||"Expired")+" ")])]):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.vipDays")||"VIP Days"}},[e("a-select",{staticStyle:{width:"100%"},model:{value:t.vipDays,callback:function(e){t.vipDays=e},expression:"vipDays"}},[e("a-select-option",{attrs:{value:0}},[t._v(t._s(t.$t("userManage.cancelVip")||"Cancel VIP"))]),e("a-select-option",{attrs:{value:7}},[t._v("7 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:30}},[t._v("30 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:90}},[t._v("90 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:180}},[t._v("180 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:365}},[t._v("365 "+t._s(t.$t("userManage.days")||"days"))]),e("a-select-option",{attrs:{value:-1}},[t._v(t._s(t.$t("userManage.customDate")||"Custom Date"))])],1)],1),-1===t.vipDays?e("a-form-item",{attrs:{label:t.$t("userManage.vipExpiresAt")||"VIP Expires At"}},[e("a-date-picker",{staticStyle:{width:"100%"},attrs:{showTime:"",format:"YYYY-MM-DD HH:mm:ss"},model:{value:t.vipCustomDate,callback:function(e){t.vipCustomDate=e},expression:"vipCustomDate"}})],1):t._e(),e("a-form-item",{attrs:{label:t.$t("userManage.remark")||"Remark"}},[e("a-input",{attrs:{placeholder:t.$t("userManage.remarkPlaceholder")||"Optional remark"},model:{value:t.vipRemark,callback:function(e){t.vipRemark=e},expression:"vipRemark"}})],1)],1)],1)],1)},r=[],i=a(81127),n=a(56252),o=a(76338),l=a(84841),d=a(55434),c=a(95353),u={name:"UserManage",mixins:[d.t],data:function(){return{activeTab:"users",loading:!1,users:[],roles:[],searchKeyword:"",pagination:{current:1,pageSize:10,total:0},modalVisible:!1,modalLoading:!1,isEdit:!1,editingUser:null,resetPasswordVisible:!1,resetPasswordLoading:!1,resetPasswordUserId:null,creditsModalVisible:!1,creditsLoading:!1,creditsEditingUser:null,newCredits:0,creditsRemark:"",vipModalVisible:!1,vipLoading:!1,vipEditingUser:null,vipDays:30,vipCustomDate:null,vipRemark:"",strategyLoading:!1,systemStrategies:[],strategySummary:null,strategyStatusFilter:"all",strategySearchKeyword:"",strategyPagination:{current:1,pageSize:20,total:0},strategiesLoaded:!1,orderLoading:!1,orders:[],orderSummary:null,orderStatusFilter:"all",orderSearchKeyword:"",orderPagination:{current:1,pageSize:20,total:0},ordersLoaded:!1,aiStatsLoading:!1,aiUserStats:[],aiRecentRecords:[],aiStatsSummary:null,aiStatsSearchKeyword:"",aiStatsPagination:{current:1,pageSize:20,total:0},aiStatsLoaded:!1}},computed:(0,o.A)((0,o.A)({},(0,c.L8)(["userInfo"])),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},currentUserId:function(){var t;return null===(t=this.userInfo)||void 0===t?void 0:t.id},columns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("userManage.username")||"Username",dataIndex:"username",width:120},{title:this.$t("userManage.nickname")||"Nickname",dataIndex:"nickname",width:100},{title:this.$t("userManage.email")||"Email",dataIndex:"email",width:180},{title:this.$t("userManage.role")||"Role",dataIndex:"role",width:90,scopedSlots:{customRender:"role"}},{title:this.$t("userManage.credits")||"Credits",dataIndex:"credits",width:100,scopedSlots:{customRender:"credits"}},{title:"VIP",dataIndex:"vip_expires_at",width:120,scopedSlots:{customRender:"vip_expires_at"}},{title:this.$t("userManage.status")||"Status",dataIndex:"status",width:90,scopedSlots:{customRender:"status"}},{title:this.$t("userManage.lastLogin")||"Last Login",dataIndex:"last_login_at",width:150,scopedSlots:{customRender:"last_login_at"}},{title:this.$t("common.actions")||"Actions",dataIndex:"action",width:180,scopedSlots:{customRender:"action"}}]},strategyColumns:function(){return[{title:"ID",dataIndex:"id",width:60,fixed:"left"},{title:this.$t("systemOverview.colUser")||"User",dataIndex:"username",width:110,fixed:"left",scopedSlots:{customRender:"userInfo"}},{title:this.$t("systemOverview.colStrategy")||"Strategy",dataIndex:"strategy_name",width:160,ellipsis:!0},{title:this.$t("systemOverview.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"strategyStatus"}},{title:this.$t("systemOverview.colSymbol")||"Symbol",dataIndex:"symbol",width:140,scopedSlots:{customRender:"symbolInfo"}},{title:this.$t("systemOverview.colCapital")||"Capital",dataIndex:"initial_capital",width:110,scopedSlots:{customRender:"capitalInfo"}},{title:this.$t("systemOverview.colPnl")||"PnL / ROI",dataIndex:"total_pnl",width:200,scopedSlots:{customRender:"pnlInfo"}},{title:this.$t("systemOverview.colPositions")||"Pos",dataIndex:"position_count",width:70,align:"center",scopedSlots:{customRender:"positionInfo"}},{title:this.$t("systemOverview.colTrades")||"Trades",dataIndex:"trade_count",width:80,align:"center",scopedSlots:{customRender:"tradeInfo"}},{title:this.$t("systemOverview.colIndicator")||"Indicator",dataIndex:"indicator_name",width:130,scopedSlots:{customRender:"indicatorInfo"}},{title:this.$t("systemOverview.colExchange")||"Exchange",dataIndex:"exchange_name",width:100,scopedSlots:{customRender:"exchangeInfo"}},{title:this.$t("systemOverview.colTimeframe")||"TF",dataIndex:"timeframe",width:70,align:"center",scopedSlots:{customRender:"timeframeInfo"}},{title:this.$t("systemOverview.colLeverage")||"Lev",dataIndex:"leverage",width:70,align:"center",scopedSlots:{customRender:"leverageInfo"}},{title:this.$t("systemOverview.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"createdAtInfo"}}]},orderColumns:function(){return[{title:this.$t("adminOrders.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"orderUserInfo"}},{title:this.$t("adminOrders.colType")||"Type",dataIndex:"order_type",width:80,scopedSlots:{customRender:"orderTypeInfo"}},{title:this.$t("adminOrders.colPlan")||"Plan",dataIndex:"plan",width:100,scopedSlots:{customRender:"planInfo"}},{title:this.$t("adminOrders.colAmount")||"Amount",dataIndex:"amount",width:120,scopedSlots:{customRender:"amountInfo"}},{title:this.$t("adminOrders.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"orderStatusInfo"}},{title:this.$t("adminOrders.colChain")||"Chain",dataIndex:"chain",width:80,scopedSlots:{customRender:"chainInfo"}},{title:this.$t("adminOrders.colAddress")||"Address",dataIndex:"address",width:140,scopedSlots:{customRender:"addressInfo"}},{title:this.$t("adminOrders.colTxHash")||"Tx Hash",dataIndex:"tx_hash",width:160,scopedSlots:{customRender:"txHashInfo"}},{title:this.$t("adminOrders.colCreatedAt")||"Created",dataIndex:"created_at",width:150,scopedSlots:{customRender:"orderCreatedAt"}}]},aiUserColumns:function(){return[{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:140,scopedSlots:{customRender:"aiUserInfo"}},{title:this.$t("adminAiStats.colAnalysisCount")||"Analyses",dataIndex:"analysis_count",width:100,align:"center",scopedSlots:{customRender:"analysisCountInfo"},sorter:function(t,e){return t.analysis_count-e.analysis_count},defaultSortOrder:"descend"},{title:this.$t("adminAiStats.colSymbols")||"Symbols",dataIndex:"symbol_count",width:90,align:"center"},{title:this.$t("adminAiStats.colMarkets")||"Markets",dataIndex:"market_count",width:90,align:"center"},{title:this.$t("adminAiStats.colAccuracy")||"Correct / Wrong",dataIndex:"correct",width:130,align:"center",scopedSlots:{customRender:"accuracyInfo"}},{title:this.$t("adminAiStats.colFeedback")||"Feedback",dataIndex:"helpful",width:130,align:"center",scopedSlots:{customRender:"feedbackInfo"}},{title:this.$t("adminAiStats.colLastAnalysis")||"Last Analysis",dataIndex:"last_analysis_at",width:160,scopedSlots:{customRender:"lastAnalysisAt"}}]},aiRecentColumns:function(){return[{title:"ID",dataIndex:"id",width:60},{title:this.$t("adminAiStats.colUser")||"User",dataIndex:"username",width:120,scopedSlots:{customRender:"recentUserInfo"}},{title:this.$t("adminAiStats.colMarket")||"Market",dataIndex:"market",width:80},{title:this.$t("adminAiStats.colSymbol")||"Symbol",dataIndex:"symbol",width:120},{title:this.$t("adminAiStats.colModel")||"Model",dataIndex:"model",width:140,ellipsis:!0},{title:this.$t("adminAiStats.colStatus")||"Status",dataIndex:"status",width:100,scopedSlots:{customRender:"recentStatusInfo"}},{title:this.$t("adminAiStats.colCreatedAt")||"Time",dataIndex:"created_at",width:160,scopedSlots:{customRender:"recentCreatedAt"}}]}}),beforeCreate:function(){this.form=this.$form.createForm(this),this.resetPasswordForm=this.$form.createForm(this,{name:"resetPassword"})},mounted:function(){this.loadUsers(),this.loadRoles()},methods:{handleTabChange:function(t){"strategies"!==t||this.strategiesLoaded||this.loadSystemStrategies(),"orders"!==t||this.ordersLoaded||this.loadOrders(),"aiStats"!==t||this.aiStatsLoaded||this.loadAiStats()},loadSystemStrategies:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.strategyLoading=!0,e.p=1,e.n=2,(0,l.DK)({page:t.strategyPagination.current,page_size:t.strategyPagination.pageSize,status:"all"===t.strategyStatusFilter?"":t.strategyStatusFilter,search:t.strategySearchKeyword||""});case 2:a=e.v,1===a.code?(t.systemStrategies=a.data.items||[],t.strategyPagination.total=a.data.total||0,t.strategySummary=a.data.summary||{},t.strategiesLoaded=!0):t.$message.error(a.msg||"Failed to load strategies"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load system strategies");case 4:return e.p=4,t.strategyLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleStrategySearch:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyFilterChange:function(){this.strategyPagination.current=1,this.loadSystemStrategies()},handleStrategyTableChange:function(t){this.strategyPagination.current=t.current,this.strategyPagination.pageSize=t.pageSize,this.loadSystemStrategies()},getUserColor:function(t){var e=["#1890ff","#722ed1","#13c2c2","#fa8c16","#eb2f96","#52c41a","#2f54eb","#faad14"];return e[(t||0)%e.length]},formatNumber:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatPnl:function(t){if(!t&&0!==t)return"0";var e=Number(t),a=e>=0?"+":"";return a+e.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:4})},truncate:function(t,e){return t?t.length>e?t.substring(0,e)+"...":t:""},loadUsers:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.loading=!0,e.p=1,e.n=2,(0,l.aU)({page:t.pagination.current,page_size:t.pagination.pageSize,search:t.searchKeyword||""});case 2:a=e.v,1===a.code?(t.users=a.data.items||[],t.pagination.total=a.data.total||0):t.$message.error(a.msg||"Failed to load users"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load users");case 4:return e.p=4,t.loading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleSearch:function(){this.pagination.current=1,this.loadUsers()},loadRoles:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return e.p=0,e.n=1,(0,l.O0)();case 1:a=e.v,1===a.code&&(t.roles=a.data.roles||[]),e.n=3;break;case 2:e.p=2,e.v;case 3:return e.a(2)}},e,null,[[0,2]])}))()},handleTableChange:function(t){this.pagination.current=t.current,this.pagination.pageSize=t.pageSize,this.loadUsers()},showCreateModal:function(){var t=this;this.isEdit=!1,this.editingUser=null,this.modalVisible=!0,this.$nextTick(function(){t.form.resetFields()})},showEditModal:function(t){var e=this;this.isEdit=!0,this.editingUser=t,this.modalVisible=!0,this.$nextTick(function(){e.form.setFieldsValue({username:t.username,nickname:t.nickname,email:t.email,role:t.role,status:t.status})})},handleModalCancel:function(){this.modalVisible=!1,this.form.resetFields()},handleModalOk:function(){var t=this;this.form.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:if(t.modalLoading=!0,e.p=2,!t.isEdit){e.n=4;break}return e.n=3,(0,l.TK)(t.editingUser.id,{nickname:s.nickname,email:s.email,role:s.role,status:s.status});case 3:r=e.v,e.n=6;break;case 4:return e.n=5,(0,l.kg)(s);case 5:r=e.v;case 6:1===r.code?(t.$message.success(r.msg||"Success"),t.modalVisible=!1,t.form.resetFields(),t.loadUsers()):t.$message.error(r.msg||"Operation failed"),e.n=8;break;case 7:e.p=7,e.v,t.$message.error("Operation failed");case 8:return e.p=8,t.modalLoading=!1,e.f(8);case 9:return e.a(2)}},e,null,[[2,7,8,9]])}));return function(t,a){return e.apply(this,arguments)}}())},handleDelete:function(t){var e=this;return(0,n.A)((0,i.A)().m(function a(){var s;return(0,i.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,(0,l.hG)(t);case 1:s=a.v,1===s.code?(e.$message.success(s.msg||"User deleted"),e.loadUsers()):e.$message.error(s.msg||"Delete failed"),a.n=3;break;case 2:a.p=2,a.v,e.$message.error("Delete failed");case 3:return a.a(2)}},a,null,[[0,2]])}))()},showResetPasswordModal:function(t){var e=this;this.resetPasswordUserId=t.id,this.resetPasswordVisible=!0,this.$nextTick(function(){e.resetPasswordForm.resetFields()})},handleResetPassword:function(){var t=this;this.resetPasswordForm.validateFields(function(){var e=(0,n.A)((0,i.A)().m(function e(a,s){var r;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!a){e.n=1;break}return e.a(2);case 1:return t.resetPasswordLoading=!0,e.p=2,e.n=3,(0,l.cw)({user_id:t.resetPasswordUserId,new_password:s.new_password});case 3:r=e.v,1===r.code?(t.$message.success(r.msg||"Password reset successfully"),t.resetPasswordVisible=!1,t.resetPasswordForm.resetFields()):t.$message.error(r.msg||"Reset failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Reset failed");case 5:return e.p=5,t.resetPasswordLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(t,a){return e.apply(this,arguments)}}())},getRoleColor:function(t){var e={admin:"red",manager:"orange",user:"blue",viewer:"default"};return e[t]||"default"},getRoleLabel:function(t){var e={admin:this.$t("userManage.roleAdmin")||"Admin",manager:this.$t("userManage.roleManager")||"Manager",user:this.$t("userManage.roleUser")||"User",viewer:this.$t("userManage.roleViewer")||"Viewer"};return e[t]||t},formatTime:function(t){if(!t)return"";var e=new Date("number"===typeof t?1e3*t:t);return e.toLocaleString()},formatCredits:function(t){return t||0===t?Number(t).toLocaleString("en-US",{minimumFractionDigits:0,maximumFractionDigits:2}):"0"},formatDate:function(t){if(!t)return"";var e=new Date(t);return e.toLocaleDateString()},isVipActive:function(t){return!!t&&new Date(t)>new Date},showCreditsModal:function(t){this.creditsEditingUser=t,this.newCredits=parseFloat(t.credits)||0,this.creditsRemark="",this.creditsModalVisible=!0},handleSetCredits:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(!(t.newCredits<0)){e.n=1;break}return t.$message.error(t.$t("userManage.creditsNonNegative")||"Credits cannot be negative"),e.a(2);case 1:return t.creditsLoading=!0,e.p=2,e.n=3,(0,l.wq)({user_id:t.creditsEditingUser.id,credits:t.newCredits,remark:t.creditsRemark});case 3:a=e.v,1===a.code?(t.$message.success(a.msg||"Credits updated successfully"),t.creditsModalVisible=!1,t.loadUsers()):t.$message.error(a.msg||"Update failed"),e.n=5;break;case 4:e.p=4,e.v,t.$message.error("Update failed");case 5:return e.p=5,t.creditsLoading=!1,e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}))()},showVipModal:function(t){this.vipEditingUser=t,this.vipDays=30,this.vipCustomDate=null,this.vipRemark="",this.vipModalVisible=!0},handleSetVip:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a,s;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a={user_id:t.vipEditingUser.id,remark:t.vipRemark},-1!==t.vipDays){e.n=2;break}if(t.vipCustomDate){e.n=1;break}return t.$message.error(t.$t("userManage.selectDate")||"Please select a date"),e.a(2);case 1:a.vip_expires_at=t.vipCustomDate.toISOString(),e.n=3;break;case 2:a.vip_days=t.vipDays;case 3:return t.vipLoading=!0,e.p=4,e.n=5,(0,l.nY)(a);case 5:s=e.v,1===s.code?(t.$message.success(s.msg||"VIP status updated successfully"),t.vipModalVisible=!1,t.loadUsers()):t.$message.error(s.msg||"Update failed"),e.n=7;break;case 6:e.p=6,e.v,t.$message.error("Update failed");case 7:return e.p=7,t.vipLoading=!1,e.f(7);case 8:return e.a(2)}},e,null,[[4,6,7,8]])}))()},loadOrders:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.orderLoading=!0,e.p=1,e.n=2,(0,l.vi)({page:t.orderPagination.current,page_size:t.orderPagination.pageSize,status:"all"===t.orderStatusFilter?"":t.orderStatusFilter,search:t.orderSearchKeyword||""});case 2:a=e.v,1===a.code?(t.orders=a.data.items||[],t.orderPagination.total=a.data.total||0,t.orderSummary=a.data.summary||{},t.ordersLoaded=!0):t.$message.error(a.msg||"Failed to load orders"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load orders");case 4:return e.p=4,t.orderLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleOrderSearch:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderFilterChange:function(){this.orderPagination.current=1,this.loadOrders()},handleOrderTableChange:function(t){this.orderPagination.current=t.current,this.orderPagination.pageSize=t.pageSize,this.loadOrders()},getOrderStatusColor:function(t){var e={paid:"green",confirmed:"green",pending:"orange",expired:"grey",cancelled:"default",failed:"red"};return e[t]||"default"},getOrderStatusLabel:function(t){var e={paid:this.$t("adminOrders.statusPaid")||"Paid",confirmed:this.$t("adminOrders.statusConfirmed")||"Confirmed",pending:this.$t("adminOrders.statusPending")||"Pending",expired:this.$t("adminOrders.statusExpired")||"Expired",cancelled:this.$t("adminOrders.statusCancelled")||"Cancelled",failed:this.$t("adminOrders.statusFailed")||"Failed"};return e[t]||t},loadAiStats:function(){var t=this;return(0,n.A)((0,i.A)().m(function e(){var a;return(0,i.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return t.aiStatsLoading=!0,e.p=1,e.n=2,(0,l.d$)({page:t.aiStatsPagination.current,page_size:t.aiStatsPagination.pageSize,search:t.aiStatsSearchKeyword||""});case 2:a=e.v,1===a.code?(t.aiUserStats=a.data.user_stats||[],t.aiRecentRecords=a.data.recent||[],t.aiStatsPagination.total=a.data.user_total||0,t.aiStatsSummary=a.data.summary||{},t.aiStatsLoaded=!0):t.$message.error(a.msg||"Failed to load AI stats"),e.n=4;break;case 3:e.p=3,e.v,t.$message.error("Failed to load AI stats");case 4:return e.p=4,t.aiStatsLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},handleAiStatsSearch:function(){this.aiStatsPagination.current=1,this.loadAiStats()},handleAiStatsTableChange:function(t){this.aiStatsPagination.current=t.current,this.aiStatsPagination.pageSize=t.pageSize,this.loadAiStats()}}},m=u,p=a(845),g=(0,p.A)(m,s,r,!1,null,"49c4f239",null),v=g.exports},84841:function(t,e,a){a.d(e,{DK:function(){return h},E$:function(){return c},Gl:function(){return p},O0:function(){return d},TK:function(){return n},aU:function(){return r},cw:function(){return l},d$:function(){return S},hG:function(){return o},kg:function(){return i},nY:function(){return y},r7:function(){return u},rx:function(){return v},v9:function(){return g},vF:function(){return m},vi:function(){return _},wq:function(){return f}});var s=a(75769);function r(t){return(0,s.Ay)({url:"/api/users/list",method:"get",params:t})}function i(t){return(0,s.Ay)({url:"/api/users/create",method:"post",data:t})}function n(t,e){return(0,s.Ay)({url:"/api/users/update",method:"put",params:{id:t},data:e})}function o(t){return(0,s.Ay)({url:"/api/users/delete",method:"delete",params:{id:t}})}function l(t){return(0,s.Ay)({url:"/api/users/reset-password",method:"post",data:t})}function d(){return(0,s.Ay)({url:"/api/users/roles",method:"get"})}function c(){return(0,s.Ay)({url:"/api/users/profile",method:"get"})}function u(t){return(0,s.Ay)({url:"/api/users/profile/update",method:"put",data:t})}function m(){return(0,s.Ay)({url:"/api/users/notification-settings",method:"get"})}function p(t){return(0,s.Ay)({url:"/api/users/notification-settings",method:"put",data:t})}function g(t){return(0,s.Ay)({url:"/api/users/my-credits-log",method:"get",params:t})}function v(t){return(0,s.Ay)({url:"/api/users/my-referrals",method:"get",params:t})}function f(t){return(0,s.Ay)({url:"/api/users/set-credits",method:"post",data:t})}function y(t){return(0,s.Ay)({url:"/api/users/set-vip",method:"post",data:t})}function h(t){return(0,s.Ay)({url:"/api/users/system-strategies",method:"get",params:t})}function _(t){return(0,s.Ay)({url:"/api/users/admin-orders",method:"get",params:t})}function S(t){return(0,s.Ay)({url:"/api/users/admin-ai-stats",method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/875-legacy.6eba2135.js b/frontend/dist/js/875-legacy.6eba2135.js new file mode 100644 index 0000000..83e5af3 --- /dev/null +++ b/frontend/dist/js/875-legacy.6eba2135.js @@ -0,0 +1 @@ +"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[875],{1875:function(e,t,a){a.r(t),a.d(t,{default:function(){return v}});a(52675),a(89463),a(28706),a(50778);var s=function(){var e=this,t=e._self._c;return t("div",{staticClass:"settings-page",class:{"theme-dark":e.isDarkTheme}},[e.showRestartTip?t("a-alert",{staticClass:"restart-alert",attrs:{type:"warning",showIcon:"",closable:""},on:{close:function(t){e.showRestartTip=!1}}},[t("template",{slot:"message"},[t("span",[e._v(e._s(e.$t("settings.restartRequired")))]),t("a-button",{attrs:{size:"small",type:"link"},on:{click:e.copyRestartCommand}},[e._v(" "+e._s(e.$t("settings.copyRestartCmd"))+" ")])],1)],2):e._e(),t("div",{staticClass:"settings-header"},[t("h2",{staticClass:"page-title"},[t("a-icon",{attrs:{type:"setting"}}),t("span",[e._v(e._s(e.$t("settings.title")))])],1),t("p",{staticClass:"page-desc"},[e._v(e._s(e.$t("settings.description")))])]),t("a-spin",{attrs:{spinning:e.loading}},[t("div",{staticClass:"settings-content"},[t("a-collapse",{staticClass:"settings-collapse",attrs:{bordered:!1},model:{value:e.activeKeys,callback:function(t){e.activeKeys=t},expression:"activeKeys"}},e._l(e.sortedSchema,function(a,s){return t("a-collapse-panel",{key:s},[t("template",{slot:"header"},[t("span",{staticClass:"panel-header"},[t("a-icon",{staticClass:"panel-icon-left",attrs:{type:a.icon||e.getGroupIcon(s)}}),t("span",{staticClass:"panel-title"},[e._v(e._s(e.getGroupTitle(s,a.title)))])],1)]),"ai"===s?t("div",{staticClass:"openrouter-balance-card"},[t("a-card",{attrs:{size:"small",bordered:!1}},[t("div",{staticClass:"balance-header"},[t("span",{staticClass:"balance-title"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"wallet"}}),e._v(" "+e._s(e.$t("settings.openrouterBalance")||"OpenRouter 账户余额")+" ")],1),t("a-button",{attrs:{size:"small",type:"primary",ghost:"",loading:e.balanceLoading},on:{click:e.queryOpenRouterBalance}},[t("a-icon",{attrs:{type:"sync"}}),e._v(" "+e._s(e.$t("settings.queryBalance")||"查询余额")+" ")],1)],1),e.openrouterBalance?t("div",{staticClass:"balance-info"},[t("a-row",{attrs:{gutter:16}},[t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceUsage")||"已使用",value:e.openrouterBalance.usage,prefix:"$",precision:4,"value-style":{color:"#cf1322"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceRemaining")||"剩余额度",value:null!==e.openrouterBalance.limit_remaining?e.openrouterBalance.limit_remaining:"∞",prefix:null!==e.openrouterBalance.limit_remaining?"$":"",precision:null!==e.openrouterBalance.limit_remaining?4:0,"value-style":{color:null!==e.openrouterBalance.limit_remaining&&e.openrouterBalance.limit_remaining<1?"#cf1322":"#3f8600"}}})],1),t("a-col",{attrs:{span:8}},[t("a-statistic",{attrs:{title:e.$t("settings.balanceLimit")||"总限额",value:null!==e.openrouterBalance.limit?e.openrouterBalance.limit:"∞",prefix:null!==e.openrouterBalance.limit?"$":"",precision:null!==e.openrouterBalance.limit?2:0}})],1)],1),e.openrouterBalance.is_free_tier?t("div",{staticClass:"free-tier-badge"},[t("a-tag",{attrs:{color:"blue"}},[e._v("Free Tier")])],1):e._e()],1):t("div",{staticClass:"balance-empty"},[t("a-icon",{staticStyle:{"margin-right":"6px"},attrs:{type:"info-circle"}}),e._v(" "+e._s(e.$t("settings.balanceNotQueried")||'点击"查询余额"获取账户信息')+" ")],1)])],1):e._e(),t("a-form",{staticClass:"settings-form",attrs:{form:e.form,layout:"vertical"}},[t("a-row",{attrs:{gutter:24}},e._l(a.items,function(a){return t("a-col",{key:a.key,attrs:{xs:24,sm:24,md:12,lg:12}},[t("a-form-item",[t("template",{slot:"label"},[t("span",{staticClass:"form-label-with-tooltip"},[t("span",{staticClass:"label-text"},[e._v(e._s(e.getItemLabel(s,a)))]),a.description?t("a-tooltip",{attrs:{placement:"top"}},[t("template",{slot:"title"},[e._v(" "+e._s(e.getItemDescription(s,a))+" ")]),t("a-icon",{staticClass:"help-icon",attrs:{type:"question-circle"}})],2):e._e(),a.link?t("a",{staticClass:"api-link",attrs:{href:a.link,target:"_blank",rel:"noopener noreferrer"},on:{click:function(e){e.stopPropagation()}}},[t("a-icon",{attrs:{type:"link"}}),e._v(" "+e._s(e.getLinkText(a.link_text))+" ")],1):e._e()],1)]),"text"===a.type?[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):"",allowClear:""}})]:"password"===a.type?[t("div",{staticClass:"password-field"},[t("a-input",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) }]"}],attrs:{type:e.passwordVisible[a.key]?"text":"password",placeholder:e.$t("settings.inputApiKey"),allowClear:""}},[t("a-icon",{staticStyle:{cursor:"pointer"},attrs:{slot:"suffix",type:e.passwordVisible[a.key]?"eye":"eye-invisible"},on:{click:function(t){return e.togglePasswordVisible(a.key)}},slot:"suffix"})],1)],1)]:"number"===a.type?[t("a-input-number",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getNumberValue(s,a.key,a.default)}],expression:"[item.key, { initialValue: getNumberValue(groupKey, item.key, item.default) }]"}],staticStyle:{width:"100%"},attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):""}})]:"boolean"===a.type?[t("a-switch",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{valuePropName:"checked",initialValue:e.getBoolValue(s,a.key,a.default)}],expression:"[item.key, { valuePropName: 'checked', initialValue: getBoolValue(groupKey, item.key, item.default) }]"}]})]:"select"===a.type?[t("a-select",{directives:[{name:"decorator",rawName:"v-decorator",value:[a.key,{initialValue:e.getFieldValue(s,a.key)||a.default}],expression:"[item.key, { initialValue: getFieldValue(groupKey, item.key) || item.default }]"}],attrs:{placeholder:a.default?"".concat(e.$t("settings.default"),": ").concat(a.default):e.$t("settings.pleaseSelect")}},e._l(e.getSelectOptions(a),function(a){return t("a-select-option",{key:a.value,attrs:{value:a.value}},[e._v(" "+e._s(a.label)+" ")])}),1)]:e._e(),a.default&&"boolean"!==a.type&&"password"!==a.type?t("div",{staticClass:"field-default"},[e._v(" "+e._s(e.$t("settings.default"))+": "+e._s(a.default)+" ")]):e._e()],2)],1)}),1)],1)],2)}),1)],1)]),t("div",{staticClass:"settings-footer"},[t("a-button",{attrs:{disabled:e.saving},on:{click:e.handleReset}},[t("a-icon",{attrs:{type:"undo"}}),e._v(" "+e._s(e.$t("settings.reset"))+" ")],1),t("a-button",{attrs:{type:"primary",loading:e.saving},on:{click:e.handleSave}},[t("a-icon",{attrs:{type:"save"}}),e._v(" "+e._s(e.$t("settings.save"))+" ")],1)],1)],1)},i=[],n=a(57532),r=a(81127),l=a(56252),o=a(44735),c=a(15863),u=(a(2008),a(62062),a(26910),a(5506),a(79432),a(26099),a(47764),a(11392),a(62953),a(53003)),p=a(55434),d={name:"Settings",mixins:[p.t],data:function(){return{loading:!1,saving:!1,schema:{},values:{},activeKeys:["auth","ai","trading"],passwordVisible:{},showRestartTip:!1,balanceLoading:!1,openrouterBalance:null}},computed:{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},sortedSchema:function(){var e=Object.entries(this.schema);e.sort(function(e,t){var a=e[1].order||999,s=t[1].order||999;return a-s});for(var t={},a=0,s=e;a0?[s("div",{staticClass:"marquee-track"},[t._l(t.marketData.indices,function(a){return s("div",{key:"a-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])}),t._l(t.marketData.indices,function(a){return s("div",{key:"b-"+a.symbol,staticClass:"index-item"},[s("span",{staticClass:"idx-flag"},[t._v(t._s(a.flag))]),s("span",{staticClass:"idx-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"idx-price"},[t._v(t._s(t.formatPrice(a.price)))]),s("span",{staticClass:"idx-change",class:a.change>=0?"up":"down"},[s("a-icon",{attrs:{type:a.change>=0?"caret-up":"caret-down"}}),t._v(" "+t._s(Math.abs(a.change).toFixed(2))+"% ")],1)])})],2)]:[s("div",{staticClass:"indices-empty"},[t._v("--")])]],2),s("a-button",{staticClass:"refresh-btn",attrs:{type:"link",size:"small",loading:t.loadingMarket},on:{click:t.loadMarketData}},[s("a-icon",{attrs:{type:"sync",spin:t.loadingMarket}})],1)],2),s("div",{staticClass:"main-body"},[s("div",{staticClass:"left-panel"},[s("div",{staticClass:"heatmap-box"},[s("div",{staticClass:"box-header"},[s("a-radio-group",{attrs:{size:"small","button-style":"solid"},model:{value:t.heatmapType,callback:function(s){t.heatmapType=s},expression:"heatmapType"}},[s("a-radio-button",{attrs:{value:"crypto"}},[t._v(t._s(t.$t("globalMarket.cryptoHeatmap")))]),s("a-radio-button",{attrs:{value:"commodities"}},[t._v(t._s(t.$t("globalMarket.commoditiesHeatmap")))]),s("a-radio-button",{attrs:{value:"sectors"}},[t._v(t._s(t.$t("globalMarket.sectorHeatmap")))]),s("a-radio-button",{attrs:{value:"forex"}},[t._v(t._s(t.$t("globalMarket.forexHeatmap")))])],1)],1),s("div",{staticClass:"heatmap-grid"},[t.loadingHeatmap?t._l(12,function(t){return s("div",{key:"skel-"+t,staticClass:"heat-cell skeleton-cell"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.currentHeatmap.length>0?t._l(t.currentHeatmap.slice(0,12),function(a,e){return s("div",{key:e,staticClass:"heat-cell",style:t.getHeatmapStyle(a.value)},[s("span",{staticClass:"heat-name"},[t._v(t._s(t.getHeatmapName(a)))]),a.price?s("span",{staticClass:"heat-price"},[t._v(t._s(t.formatHeatmapPrice(a.price)))]):t._e(),s("span",{staticClass:"heat-val"},[t._v(t._s(a.value>=0?"+":"")+t._s(t.formatNum(a.value))+"%")])])}):[s("div",{staticClass:"heatmap-empty"},[t._v(t._s(t.$t("common.noData")||"暂无数据"))])]],2)]),s("div",{staticClass:"calendar-box"},[s("div",{staticClass:"box-header"},[s("span",{staticClass:"box-title"},[s("a-icon",{attrs:{type:"calendar"}}),t._v(" "+t._s(t.$t("globalMarket.calendar")))],1)]),s("div",{staticClass:"calendar-list"},[t.loadingCalendar?t._l(5,function(t){return s("div",{key:"cal-skel-"+t,staticClass:"cal-item skeleton-item"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}):t.marketData.calendar.length>0?t._l(t.marketData.calendar.slice(0,10),function(a){return s("div",{key:a.id,staticClass:"cal-item",class:a.importance},[s("span",{staticClass:"cal-date"},[t._v(t._s(t.formatCalendarDate(a.date)))]),s("span",{staticClass:"cal-time"},[t._v(t._s(a.time||"--:--"))]),s("span",{staticClass:"cal-flag"},[t._v(t._s(t.getCountryFlag(a.country)))]),s("span",{staticClass:"cal-name"},[t._v(t._s(t.isZhLocale?a.name:a.name_en))]),s("span",{staticClass:"cal-impact",class:t.getImpactClass(a)},["bullish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-up"}}):"bearish"===t.getImpactClass(a)?s("a-icon",{attrs:{type:"arrow-down"}}):s("a-icon",{attrs:{type:"minus"}}),t._v(" "+t._s(a.actual||a.forecast||"--")+" ")],1)])}):[s("div",{staticClass:"cal-empty"},[t._v(t._s(t.$t("globalMarket.noEvents")))])]],2)])]),s("div",{staticClass:"right-panel"},[s("div",{staticClass:"analysis-toolbar"},[s("a-select",{staticClass:"symbol-selector",attrs:{placeholder:t.$t("dashboard.analysis.empty.selectSymbol"),size:"large","show-search":"","allow-clear":"","filter-option":t.filterSymbolOption},on:{change:t.handleSymbolChange},model:{value:t.selectedSymbol,callback:function(s){t.selectedSymbol=s},expression:"selectedSymbol"}},[t._l(t.watchlist||[],function(a){return s("a-select-option",{key:"".concat(a.market,"-").concat(a.symbol),attrs:{value:"".concat(a.market,":").concat(a.symbol)}},[s("span",{staticClass:"symbol-option"},[s("a-tag",{attrs:{color:t.getMarketColor(a.market),size:"small"}},[t._v(t._s(t.getMarketName(a.market)))]),s("strong",{staticStyle:{"margin-left":"6px"}},[t._v(t._s(a.symbol))]),a.name?s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]):t._e()],1)])}),s("a-select-option",{key:"add-stock-option",staticClass:"add-stock-option",attrs:{value:"__add_stock_option__"}},[s("div",{staticStyle:{"text-align":"center",padding:"4px 0",color:"#1890ff"}},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"plus"}}),t._v(t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)])],2),s("a-button",{staticClass:"analyze-button",attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.selectedSymbol||t.analyzing},on:{click:t.startFastAnalysis}},[t._v(" "+t._s(t.$t("fastAnalysis.startAnalysis"))+" ")]),s("a-button",{staticClass:"history-button",attrs:{size:"large",icon:"history"},on:{click:function(s){t.showHistoryModal=!0,t.loadHistoryList()}}},[t._v(" "+t._s(t.$t("fastAnalysis.history"))+" ")])],1),s("div",{staticClass:"analysis-main"},[t.analysisResult||t.analyzing||t.analysisError?t._e():s("div",{staticClass:"analysis-placeholder"},[s("div",{staticClass:"placeholder-content"},[s("div",{staticClass:"placeholder-icon"},[s("a-icon",{attrs:{type:"robot"}})],1),s("h3",[t._v(t._s(t.$t("fastAnalysis.selectTip")))]),s("p",[t._v(t._s(t.$t("fastAnalysis.selectHint")))])])]),t.analysisResult||t.analyzing||t.analysisError?s("FastAnalysisReport",{attrs:{result:t.analysisResult,loading:t.analyzing,error:t.analysisError,"error-tone":t.analysisErrorTone},on:{retry:t.startFastAnalysis}}):t._e()],1)]),s("div",{staticClass:"watchlist-panel"},[s("div",{staticClass:"panel-header"},[s("span",{staticClass:"panel-title"},[s("a-icon",{attrs:{type:"star",theme:"filled"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.title")))],1),s("a-button",{attrs:{type:"link",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}})],1)],1),s("div",{staticClass:"watchlist-list"},[t._l(t.watchlist||[],function(a){var e,i,r;return s("div",{key:"".concat(a.market,"-").concat(a.symbol),staticClass:"watchlist-item",class:{active:t.selectedSymbol==="".concat(a.market,":").concat(a.symbol)},on:{click:function(s){return t.selectWatchlistItem(a)}}},[s("div",{staticClass:"item-main"},[s("span",{staticClass:"item-symbol"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"item-name"},[t._v(t._s(a.name||t.getMarketName(a.market)))])]),t.watchlistPrices["".concat(a.market,":").concat(a.symbol)]?s("div",{staticClass:"item-price"},[s("span",{staticClass:"price-value"},[t._v(t._s(t.formatPrice(t.watchlistPrices["".concat(a.market,":").concat(a.symbol)].price)))]),s("span",{staticClass:"price-change",class:((null===(e=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===e?void 0:e.change)||0)>=0?"up":"down"},[t._v(" "+t._s(((null===(i=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===i?void 0:i.change)||0)>=0?"+":"")+t._s(t.formatNum(null===(r=t.watchlistPrices["".concat(a.market,":").concat(a.symbol)])||void 0===r?void 0:r.change))+"% ")])]):t._e(),s("a-icon",{staticClass:"item-remove",attrs:{type:"close"},on:{click:function(s){return s.stopPropagation(),t.removeFromWatchlist(a)}}})],1)}),t.watchlist&&0!==t.watchlist.length?t._e():s("div",{staticClass:"watchlist-empty"},[s("a-icon",{attrs:{type:"inbox"}}),s("p",[t._v(t._s(t.$t("dashboard.analysis.empty.noWatchlist")))]),s("a-button",{attrs:{type:"primary",size:"small"},on:{click:function(s){t.showAddStockModal=!0}}},[s("a-icon",{attrs:{type:"plus"}}),t._v(" "+t._s(t.$t("dashboard.analysis.watchlist.add"))+" ")],1)],1)],2)])])]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.addStock.title"),visible:t.showAddStockModal,confirmLoading:t.addingStock,width:"600px",okText:t.$t("dashboard.analysis.modal.addStock.confirm"),cancelText:t.$t("dashboard.analysis.modal.addStock.cancel")},on:{ok:t.handleAddStock,cancel:t.handleCloseAddStockModal}},[s("div",{staticClass:"add-stock-modal-content"},[s("a-tabs",{staticClass:"market-tabs",on:{change:t.handleMarketTabChange},model:{value:t.selectedMarketTab,callback:function(s){t.selectedMarketTab=s},expression:"selectedMarketTab"}},t._l(t.marketTypes,function(a){return s("a-tab-pane",{key:a.value,attrs:{tab:t.$t(a.i18nKey||"dashboard.analysis.market.".concat(a.value))}})}),1),s("div",{staticClass:"symbol-search-section"},[s("a-input-search",{attrs:{placeholder:t.$t("dashboard.analysis.modal.addStock.searchOrInputPlaceholder"),loading:t.searchingSymbols,size:"large","allow-clear":""},on:{search:t.handleSearchOrInput,change:t.handleSymbolSearchInput},model:{value:t.symbolSearchKeyword,callback:function(s){t.symbolSearchKeyword=s},expression:"symbolSearchKeyword"}},[s("a-button",{attrs:{slot:"enterButton",type:"primary",icon:"search"},slot:"enterButton"},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.search"))+" ")])],1)],1),t.symbolSearchResults.length>0?s("div",{staticClass:"search-results-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{"margin-right":"4px"},attrs:{type:"search"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.searchResults"))+" ")],1),s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.symbolSearchResults,loading:t.searchingSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"blue"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,1074844145)})],1):t._e(),s("div",{staticClass:"hot-symbols-section"},[s("div",{staticClass:"section-title"},[s("a-icon",{staticStyle:{color:"#ff4d4f","margin-right":"4px"},attrs:{type:"fire"}}),t._v(" "+t._s(t.$t("dashboard.analysis.modal.addStock.hotSymbols"))+" ")],1),s("a-spin",{attrs:{spinning:t.loadingHotSymbols}},[t.hotSymbols.length>0?s("a-list",{staticClass:"symbol-list",attrs:{"data-source":t.hotSymbols,size:"small"},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{staticClass:"symbol-list-item",on:{click:function(s){return t.selectSymbol(a)}}},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticClass:"symbol-item-content"},[s("span",{staticClass:"symbol-code"},[t._v(t._s(a.symbol))]),s("span",{staticClass:"symbol-name"},[t._v(t._s(a.name))]),a.exchange?s("a-tag",{staticStyle:{"margin-left":"8px"},attrs:{size:"small",color:"orange"}},[t._v(" "+t._s(a.exchange)+" ")]):t._e()],1)])],2)],1)}}],null,!1,2177647935)}):s("a-empty",{attrs:{description:t.$t("dashboard.analysis.modal.addStock.noHotSymbols"),image:!1}})],1)],1),t.selectedSymbolForAdd?s("div",{staticClass:"selected-symbol-section"},[s("a-alert",{attrs:{message:t.$t("dashboard.analysis.modal.addStock.selectedSymbol"),type:"info","show-icon":"",closable:""},on:{close:function(s){t.selectedSymbolForAdd=null}}},[s("template",{slot:"description"},[s("div",{staticClass:"selected-symbol-info"},[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(t.selectedSymbolForAdd.market)}},[t._v(" "+t._s(t.$t("dashboard.analysis.market.".concat(t.selectedSymbolForAdd.market)))+" ")]),s("strong",[t._v(t._s(t.selectedSymbolForAdd.symbol))]),t.selectedSymbolForAdd.name?s("span",{staticStyle:{color:"#999","margin-left":"8px"}},[t._v(t._s(t.selectedSymbolForAdd.name))]):t._e()],1)])],2)],1):t._e()],1)]),s("a-modal",{attrs:{title:t.$t("dashboard.analysis.modal.history.title"),visible:t.showHistoryModal,footer:null,width:"800px",bodyStyle:{maxHeight:"60vh",overflowY:"auto"}},on:{cancel:function(s){t.showHistoryModal=!1}}},[s("a-spin",{attrs:{spinning:t.historyLoading}},[s("a-list",{attrs:{"data-source":t.historyList,pagination:{current:t.historyPage,pageSize:t.historyPageSize,total:t.historyTotal,onChange:function(s){t.historyPage=s,t.loadHistoryList()},showSizeChanger:!0,pageSizeOptions:["10","20","50"],onShowSizeChange:function(s,a){t.historyPageSize=a,t.historyPage=1,t.loadHistoryList()}}},scopedSlots:t._u([{key:"renderItem",fn:function(a){return s("a-list-item",{},[s("a-list-item-meta",[s("template",{slot:"title"},[s("div",{staticStyle:{display:"flex","align-items":"center","justify-content":"space-between"}},[s("div",[s("a-tag",{staticStyle:{"margin-right":"8px"},attrs:{color:t.getMarketColor(a.market)}},[t._v(" "+t._s(t.getMarketName(a.market))+" ")]),s("strong",[t._v(t._s(a.symbol))]),s("a-tag",{staticStyle:{"margin-left":"12px"},attrs:{color:"BUY"===a.decision?"green":"SELL"===a.decision?"red":"blue"}},[t._v(" "+t._s(a.decision)+" ")]),s("span",{staticStyle:{color:"#999","margin-left":"8px","font-size":"12px"}},[t._v(" "+t._s(t.$t("fastAnalysis.confidence"))+": "+t._s(a.confidence)+"% ")])],1),s("div",[s("a-button",{attrs:{type:"link",size:"small",icon:"eye"},on:{click:function(s){return t.viewHistoryResult(a)}}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.viewResult"))+" ")]),s("a-popconfirm",{attrs:{title:t.$t("dashboard.analysis.modal.history.deleteConfirm"),"ok-text":t.$t("common.confirm"),"cancel-text":t.$t("common.cancel")},on:{confirm:function(s){return t.deleteHistoryItem(a)}}},[s("a-button",{staticStyle:{color:"#ff4d4f"},attrs:{type:"link",size:"small",icon:"delete"}},[t._v(" "+t._s(t.$t("dashboard.analysis.modal.history.delete"))+" ")])],1)],1)])]),s("template",{slot:"description"},[s("div",{staticStyle:{color:"#666","font-size":"12px"}},[a.price?s("span",[t._v("$"+t._s(t.formatNumber(a.price)))]):t._e(),a.summary?s("span",{staticStyle:{"margin-left":"8px"}},[t._v(t._s(a.summary.substring(0,80))+t._s(a.summary.length>80?"...":""))]):t._e()]),a.created_at?s("div",{staticStyle:{color:"#999","font-size":"12px","margin-top":"4px"}},[t._v(" "+t._s(t.formatIsoTime(a.created_at))+" ")]):t._e()])],2)],1)}}])}),t.historyLoading||0!==t.historyList.length?t._e():s("a-empty",{attrs:{description:t.$t("dashboard.analysis.empty.noHistory")}})],1)],1)],1)},i=[function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])},function(){var t=this,s=t._self._c;return s("div",{staticClass:"indicator-box skeleton-box"},[s("span",{staticClass:"skeleton-text short"}),s("span",{staticClass:"skeleton-text"})])}],r=a(44735),n=a(15863),l=a(81127),o=a(56252),c=a(76338),d=(a(74423),a(95353)),u=a(505),m=a(35038),h=a(75769),y="/api/fast-analysis";function p(t){return(0,h.Ay)({url:"".concat(y,"/analyze"),method:"post",data:t,timeout:3e5})}function v(t){return(0,h.Ay)({url:"".concat(y,"/history/all"),method:"get",params:t})}function f(t){return(0,h.Ay)({url:"".concat(y,"/history/").concat(t),method:"delete"})}function g(t){return(0,h.Ay)({url:"".concat(y,"/feedback"),method:"post",data:t})}var b=a(44146),_=function(){var t,s,a,e,i,r,n,l,o,c,d,u,m,h,y,p,v,f,g,b,_,k,C,S,A,w=this,$=w._self._c;return $("div",{staticClass:"fast-analysis-report",class:{"theme-dark":w.isDarkTheme}},[w.loading?$("div",{staticClass:"loading-container"},[$("div",{staticClass:"loading-content-pro"},[$("div",{staticClass:"loading-header"},[$("a-icon",{staticClass:"loading-icon-pro",attrs:{type:"thunderbolt"}}),$("span",{staticClass:"loading-title"},[w._v(w._s(w.$t("fastAnalysis.analyzing")))])],1),$("div",{staticClass:"progress-wrapper"},[$("a-progress",{attrs:{percent:w.progressPercent,showInfo:!1,strokeColor:"#1890ff",strokeWidth:8}}),$("span",{staticClass:"progress-text"},[w._v(w._s(w.formatProgress(w.progressPercent))+"%")])],1),$("div",{staticClass:"current-step"},[$("a-icon",{attrs:{type:"loading",spin:""}}),$("span",[w._v(w._s(w.currentStepText))])],1),$("div",{staticClass:"steps-list"},[$("div",{staticClass:"step-item",class:{done:w.step>1,active:1===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step1")||"获取实时数据"))]),w.step>1?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>2,active:2===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step2")||"计算技术指标"))]),w.step>2?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>3,active:3===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step3")||"AI深度分析"))]),w.step>3?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1),$("div",{staticClass:"step-item",class:{done:w.step>4,active:4===w.step}},[$("span",{staticClass:"step-dot"}),$("span",{staticClass:"step-text"},[w._v(w._s(w.$t("fastAnalysis.step4")||"生成报告"))]),w.step>4?$("a-icon",{staticClass:"step-check",attrs:{type:"check"}}):w._e()],1)]),$("div",{staticClass:"loading-footer"},[$("span",{staticClass:"elapsed-time"},[w._v(w._s(w.elapsedTimeText))])])])]):w.error?$("div",{staticClass:"error-container"},[$("a-result",{attrs:{status:"warning"===w.errorTone?"warning":"error",title:w.errorTitle,"sub-title":w.error},scopedSlots:w._u([{key:"extra",fn:function(){return[$("a-button",{attrs:{type:"primary"},on:{click:function(t){return w.$emit("retry")}}},[w._v(" "+w._s(w.$t("fastAnalysis.retry"))+" ")])]},proxy:!0}])})],1):w.result?$("div",{staticClass:"result-container"},[$("div",{staticClass:"decision-card",class:w.decisionClass},[$("div",{staticClass:"decision-main"},[$("div",{staticClass:"decision-badge"},[$("a-icon",{attrs:{type:w.decisionIcon}}),$("span",{staticClass:"decision-text"},[w._v(w._s(w.result.decision))])],1),$("div",{staticClass:"confidence-ring"},[$("a-progress",{attrs:{type:"circle",percent:w.result.confidence,width:80,strokeColor:w.confidenceColor},scopedSlots:w._u([{key:"format",fn:function(t){return[$("span",{staticClass:"confidence-value"},[w._v(w._s(t)+"%")])]}}])}),$("div",{staticClass:"confidence-label"},[w._v(w._s(w.$t("fastAnalysis.confidence")))])],1)]),$("div",{staticClass:"decision-summary"},[w._v(" "+w._s(w.result.summary)+" ")]),w.consensusBlock?$("div",{staticClass:"consensus-strip"},[$("div",{staticClass:"consensus-strip-title"},[$("a-icon",{attrs:{type:"cluster"}}),w._v(" "+w._s(w.$t("fastAnalysis.consensusTitle"))+" ")],1),$("div",{staticClass:"consensus-strip-metrics"},[$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusDecision")))]),w._v(" "+w._s(w.consensusBlock.consensus_decision)+" ")]),$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusScore")))]),w._v(" "+w._s(w.formatConsensusNum(w.consensusBlock.consensus_score))+" ")]),null!=w.consensusBlock.agreement_ratio?$("span",{staticClass:"cm-item"},[$("em",[w._v(w._s(w.$t("fastAnalysis.consensusAgreement")))]),w._v(" "+w._s(w.formatAgreementPct(w.consensusBlock.agreement_ratio))+" ")]):w._e()])]):w._e()]),$("div",{staticClass:"price-info-row"},[$("div",{staticClass:"price-card current"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.currentPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(t=w.result.market_data)||void 0===t?void 0:t.current_price)))]),$("div",{staticClass:"price-change",class:(null===(s=w.result.market_data)||void 0===s?void 0:s.change_24h)>=0?"positive":"negative"},[w._v(" "+w._s((null===(a=w.result.market_data)||void 0===a?void 0:a.change_24h)>=0?"+":"")+w._s(w.formatNumber(null===(e=w.result.market_data)||void 0===e?void 0:e.change_24h,2))+"% ")])]),$("div",{staticClass:"price-card entry"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.entryPrice")))]),$("div",{staticClass:"price-value"},[w._v("$"+w._s(w.formatPrice(null===(i=w.result.trading_plan)||void 0===i?void 0:i.entry_price)))])]),$("div",{staticClass:"price-card stop"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.stopLoss")))]),$("div",{staticClass:"price-value negative"},[w._v("$"+w._s(w.formatPrice(null===(r=w.result.trading_plan)||void 0===r?void 0:r.stop_loss)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.stopLossHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)]),$("div",{staticClass:"price-card target"},[$("div",{staticClass:"price-label"},[w._v(w._s(w.$t("fastAnalysis.takeProfit")))]),$("div",{staticClass:"price-value positive"},[w._v("$"+w._s(w.formatPrice(null===(n=w.result.trading_plan)||void 0===n?void 0:n.take_profit)))]),$("div",{staticClass:"price-hint"},[$("a-tooltip",{attrs:{title:w.$t("fastAnalysis.takeProfitHint")}},[$("a-icon",{attrs:{type:"info-circle"}}),w._v(" "+w._s(w.$t("fastAnalysis.atrBased"))+" ")],1)],1)])]),$("div",{staticClass:"scores-row"},[$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technical")))])],1),$("a-progress",{attrs:{percent:(null===(l=w.result.scores)||void 0===l?void 0:l.technical)||50,strokeColor:w.getScoreColor(null===(o=w.result.scores)||void 0===o?void 0:o.technical),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(c=w.result.scores)||void 0===c?void 0:c.technical)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamental")))])],1),$("a-progress",{attrs:{percent:(null===(d=w.result.scores)||void 0===d?void 0:d.fundamental)||50,strokeColor:w.getScoreColor(null===(u=w.result.scores)||void 0===u?void 0:u.fundamental),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(m=w.result.scores)||void 0===m?void 0:m.fundamental)||50))])],1),$("div",{staticClass:"score-item"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentiment")))])],1),$("a-progress",{attrs:{percent:(null===(h=w.result.scores)||void 0===h?void 0:h.sentiment)||50,strokeColor:w.getScoreColor(null===(y=w.result.scores)||void 0===y?void 0:y.sentiment),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(p=w.result.scores)||void 0===p?void 0:p.sentiment)||50))])],1),$("div",{staticClass:"score-item overall"},[$("div",{staticClass:"score-header"},[$("a-icon",{attrs:{type:"dashboard"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.overall")))])],1),$("a-progress",{attrs:{percent:(null===(v=w.result.scores)||void 0===v?void 0:v.overall)||50,strokeColor:w.getScoreColor(null===(f=w.result.scores)||void 0===f?void 0:f.overall),showInfo:!1}}),$("div",{staticClass:"score-value"},[w._v(w._s((null===(g=w.result.scores)||void 0===g?void 0:g.overall)||50))])],1)]),w.result.detailed_analysis?$("div",{staticClass:"detailed-analysis"},[w.result.detailed_analysis.technical?$("div",{staticClass:"analysis-card technical"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"line-chart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.technicalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(b=w.result.scores)||void 0===b?void 0:b.technical)}},[w._v(" "+w._s((null===(_=w.result.scores)||void 0===_?void 0:_.technical)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.technical)+" ")])]):w._e(),w.result.detailed_analysis.fundamental?$("div",{staticClass:"analysis-card fundamental"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"bank"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.fundamentalAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(k=w.result.scores)||void 0===k?void 0:k.fundamental)}},[w._v(" "+w._s((null===(C=w.result.scores)||void 0===C?void 0:C.fundamental)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.fundamental)+" ")])]):w._e(),w.result.detailed_analysis.sentiment?$("div",{staticClass:"analysis-card sentiment"},[$("div",{staticClass:"analysis-card-header"},[$("a-icon",{attrs:{type:"heart"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.sentimentAnalysis")))]),$("a-tag",{attrs:{color:w.getScoreTagColor(null===(S=w.result.scores)||void 0===S?void 0:S.sentiment)}},[w._v(" "+w._s((null===(A=w.result.scores)||void 0===A?void 0:A.sentiment)||50)+"分 ")])],1),$("div",{staticClass:"analysis-card-content"},[w._v(" "+w._s(w.result.detailed_analysis.sentiment)+" ")])]):w._e()]):w._e(),$("div",{staticClass:"analysis-details"},[$("div",{staticClass:"detail-section reasons"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"bulb",theme:"twoTone",twoToneColor:"#52c41a"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.keyReasons")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.reasons,function(t,s){return $("li",{key:"r-"+s},[w._v(" "+w._s(t)+" ")])}),0)]),$("div",{staticClass:"detail-section risks"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"warning",theme:"twoTone",twoToneColor:"#faad14"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.risks")))])],1),$("ul",{staticClass:"detail-list"},w._l(w.result.risks,function(t,s){return $("li",{key:"k-"+s},[w._v(" "+w._s(t)+" ")])}),0)])]),w.result.indicators&&Object.keys(w.result.indicators).length>0?$("div",{staticClass:"indicators-section"},[$("div",{staticClass:"section-title"},[$("a-icon",{attrs:{type:"stock"}}),$("span",[w._v(w._s(w.$t("fastAnalysis.indicators")))])],1),$("div",{staticClass:"indicators-grid"},[w.result.indicators.rsi?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("RSI (14)")]),$("div",{staticClass:"indicator-value",class:w.getRsiClass(w.result.indicators.rsi.value)},[w._v(" "+w._s(w.formatNumber(w.result.indicators.rsi.value,1))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.rsi.signal)))])]):w._e(),w.result.indicators.macd?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v("MACD")]),$("div",{staticClass:"indicator-value",class:"bullish"===w.result.indicators.macd.signal?"bullish":"bearish"===w.result.indicators.macd.signal?"bearish":""},[w._v(" "+w._s(w.translateTrend(w.result.indicators.macd.trend))+" ")]),$("div",{staticClass:"indicator-signal"},[w._v(w._s(w.translateSignal(w.result.indicators.macd.signal)))])]):w._e(),w.result.indicators.moving_averages?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.maTrend")))]),$("div",{staticClass:"indicator-value",class:w.getMaTrendClass(w.result.indicators.moving_averages.trend)},[w._v(" "+w._s(w.translateTrend(w.result.indicators.moving_averages.trend))+" ")])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.support")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.support)))])]):w._e(),w.result.indicators.levels?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.resistance")))]),$("div",{staticClass:"indicator-value"},[w._v("$"+w._s(w.formatPrice(w.result.indicators.levels.resistance)))])]):w._e(),w.result.indicators.volatility?$("div",{staticClass:"indicator-item"},[$("div",{staticClass:"indicator-name"},[w._v(w._s(w.$t("fastAnalysis.volatility")))]),$("div",{staticClass:"indicator-value",class:w.getVolatilityClass(w.result.indicators.volatility.level)},[w._v(" "+w._s(w.translateVolatility(w.result.indicators.volatility.level))+" ("+w._s(w.result.indicators.volatility.pct)+"%) ")])]):w._e()])]):w._e(),$("div",{staticClass:"feedback-section"},[$("div",{staticClass:"feedback-question"},[w._v(w._s(w.$t("fastAnalysis.wasHelpful")))]),$("div",{staticClass:"feedback-buttons"},[$("a-button",{attrs:{type:"helpful"===w.userFeedback?"primary":"default",size:"small",loading:"helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("helpful")}}},[$("a-icon",{attrs:{type:"like"}}),w._v(" "+w._s(w.$t("fastAnalysis.helpful"))+" ")],1),$("a-button",{attrs:{type:"not_helpful"===w.userFeedback?"danger":"default",size:"small",loading:"not_helpful"===w.feedbackLoading},on:{click:function(t){return w.submitFeedback("not_helpful")}}},[$("a-icon",{attrs:{type:"dislike"}}),w._v(" "+w._s(w.$t("fastAnalysis.notHelpful"))+" ")],1)],1),$("div",{staticClass:"analysis-meta"},[$("span",[w._v(w._s(w.$t("fastAnalysis.analysisTime"))+": "+w._s(w.result.analysis_time_ms)+"ms")]),w.result.memory_id?$("span",[w._v("ID: #"+w._s(w.result.memory_id))]):w._e()])])]):$("div",{staticClass:"empty-container"},[$("div",{staticClass:"empty-content"},[$("a-icon",{staticClass:"empty-icon",attrs:{type:"radar-chart"}}),$("div",{staticClass:"empty-title"},[w._v(w._s(w.$t("fastAnalysis.selectSymbol")))]),$("div",{staticClass:"empty-hint"},[w._v(w._s(w.$t("fastAnalysis.selectHint")))])],1)])])},k=[],C={name:"FastAnalysisReport",props:{result:{type:Object,default:null},loading:{type:Boolean,default:!1},error:{type:String,default:null},errorTone:{type:String,default:"error",validator:function(t){return["error","warning","info"].includes(t)}}},data:function(){return{userFeedback:null,feedbackLoading:null,progress:0,elapsedSeconds:0,mainTimer:null}},computed:(0,c.A)((0,c.A)({},(0,d.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},progressPercent:function(){return Math.round(10*this.progress)/10},step:function(){return this.progress<25?1:this.progress<50?2:this.progress<75?3:4},currentStepText:function(){var t={1:this.$t("fastAnalysis.step1")||"获取实时数据",2:this.$t("fastAnalysis.step2")||"计算技术指标",3:this.$t("fastAnalysis.step3")||"AI深度分析",4:this.$t("fastAnalysis.step4")||"生成报告"};return t[this.step]||this.$t("fastAnalysis.preparing")||"准备中..."},elapsedTimeText:function(){if(this.elapsedSeconds<60)return"".concat(this.elapsedSeconds,"s");var t=Math.floor(this.elapsedSeconds/60),s=this.elapsedSeconds%60;return"".concat(t,"m ").concat(s,"s")},decisionClass:function(){if(!this.result)return"";var t=this.result.decision;return"BUY"===t?"decision-buy":"SELL"===t?"decision-sell":"decision-hold"},decisionIcon:function(){if(!this.result)return"question";var t=this.result.decision;return"BUY"===t?"arrow-up":"SELL"===t?"arrow-down":"pause"},confidenceColor:function(){var t,s=(null===(t=this.result)||void 0===t?void 0:t.confidence)||50;return s>=70?"#52c41a":s>=50?"#1890ff":"#faad14"},consensusBlock:function(){var t,s=null===(t=this.result)||void 0===t?void 0:t.consensus;return s&&"object"===(0,r.A)(s)?null==s.consensus_decision&&null==s.consensus_score?null:s:null},insufficientCreditsError:function(){if(!this.error)return!1;var t=String(this.error);return t.includes("积分不足")||t.toLowerCase().includes("insufficient credits")},errorTitle:function(){return"warning"===this.errorTone?this.$t("fastAnalysis.analysisInProgressTitle"):this.insufficientCreditsError?this.$t("fastAnalysis.insufficientCredits"):this.$t("fastAnalysis.error")}}),watch:{result:function(){this.userFeedback=null},loading:{handler:function(t){t?this.startProgressTimer():this.stopProgressTimer()},immediate:!0}},mounted:function(){this.loading&&this.startProgressTimer()},beforeDestroy:function(){this.stopProgressTimer()},methods:{formatPrice:function(t){if(void 0===t||null===t)return"--";var s=parseFloat(t);return isNaN(s)?"--":s<1?s.toFixed(6):s<100?s.toFixed(4):s<1e4?s.toFixed(2):s.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},formatNumber:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(void 0===t||null===t)return"--";var a=parseFloat(t);return isNaN(a)?"--":a.toFixed(s)},formatConsensusNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?"--":s.toFixed(1)},formatAgreementPct:function(t){var s=Number(t);return Number.isNaN(s)?"--":"".concat(Math.round(100*s),"%")},formatProgress:function(t){var s=parseFloat(t)||0;return s%1===0?s.toFixed(0):s.toFixed(1)},getScoreColor:function(t){return t>=70?"#52c41a":t>=50?"#1890ff":t>=30?"#faad14":"#ff4d4f"},getScoreTagColor:function(t){return t>=70?"green":t>=50?"blue":t>=30?"orange":"red"},getRsiClass:function(t){return t<30?"oversold":t>70?"overbought":""},getMaTrendClass:function(t){return t?t.includes("uptrend")||t.includes("strong_uptrend")?"bullish":t.includes("downtrend")||t.includes("strong_downtrend")?"bearish":"":""},getVolatilityClass:function(t){return"high"===t?"high-volatility":"low"===t?"low-volatility":""},translateSignal:function(t){if(!t)return"--";var s="fastAnalysis.signal.".concat(t),a=this.$t(s);return a===s?t:a},translateTrend:function(t){if(!t)return"--";var s="fastAnalysis.trend.".concat(t),a=this.$t(s);return a===s?t:a},translateVolatility:function(t){if(!t)return"--";var s="fastAnalysis.volatilityLevel.".concat(t),a=this.$t(s);return a===s?t:a},submitFeedback:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(null!==(e=s.result)&&void 0!==e&&e.memory_id){a.n=1;break}return s.$message.warning(s.$t("fastAnalysis.feedbackUnavailable")||"反馈功能暂不可用,请刷新后重试"),a.a(2);case 1:return s.feedbackLoading=t,a.p=2,a.n=3,g({memory_id:s.result.memory_id,feedback:t});case 3:s.userFeedback=t,s.$message.success(s.$t("fastAnalysis.feedbackThanks")),a.n=5;break;case 4:a.p=4,a.v,s.$message.error(s.$t("fastAnalysis.feedbackFailed"));case 5:return a.p=5,s.feedbackLoading=null,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},startProgressTimer:function(){var t=this;this.stopProgressTimer(),this.progress=0,this.elapsedSeconds=0;var s=Date.now();this.mainTimer=window.setInterval(function(){t.elapsedSeconds=Math.floor((Date.now()-s)/1e3),t.progress<75?t.progress=Math.min(t.progress+1,75):t.progress<90?t.progress=Math.min(t.progress+.5,90):t.progress<95&&(t.progress=Math.min(t.progress+.2,95))},100)},stopProgressTimer:function(){this.mainTimer&&(window.clearInterval(this.mainTimer),this.mainTimer=null),this.progress=0,this.elapsedSeconds=0}}},S=C,A=a(845),w=(0,A.A)(S,_,k,!1,null,"693144f6",null),$=w.exports,T={name:"Analysis",props:{embedded:{type:Boolean,default:!1},presetSymbol:{type:String,default:""},autoAnalyzeSignal:{type:Number,default:0}},components:{FastAnalysisReport:$},data:function(){return{loadingMarket:!1,heatmapType:"crypto",marketData:{fearGreed:null,vix:null,dxy:null,indices:[],heatmap:{crypto:[],commodities:[],sectors:[],forex:[]},calendar:[]},loadingSentiment:!1,loadingIndices:!1,loadingHeatmap:!1,loadingCalendar:!1,watchlistPriceTimer:null,watchlistPrices:{},localUserInfo:{},loadingUserInfo:!1,userId:1,watchlist:[],loadingWatchlist:!1,showAddStockModal:!1,addingStock:!1,selectedSymbol:void 0,analyzing:!1,analysisResult:null,analysisError:null,analysisErrorTone:"error",showHistoryModal:!1,historyList:[],historyLoading:!1,historyPage:1,historyPageSize:20,historyTotal:0,marketTypes:[],selectedMarketTab:"",symbolSearchKeyword:"",symbolSearchResults:[],searchingSymbols:!1,hotSymbols:[],loadingHotSymbols:!1,selectedSymbolForAdd:null,searchTimer:null,hasSearched:!1}},computed:(0,c.A)((0,c.A)((0,c.A)({},(0,d.L8)(["userInfo"])),(0,d.aH)({navTheme:function(t){return t.app.theme},primaryColor:function(t){return t.app.color||"#1890ff"}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},isZhLocale:function(){return"zh-CN"===this.$i18n.locale},currentHeatmap:function(){return this.marketData.heatmap[this.heatmapType]||[]},storeUserInfo:function(){return this.userInfo||{}},mergedUserInfo:function(){return this.localUserInfo&&this.localUserInfo.email?this.localUserInfo:this.storeUserInfo}}),created:function(){this.loadUserInfo(),this.loadMarketTypes(),this.loadWatchlist(),this.loadMarketData()},mounted:function(){this.startWatchlistPriceRefresh()},beforeDestroy:function(){this.watchlistPriceTimer&&clearInterval(this.watchlistPriceTimer)},methods:{filterSymbolOption:function(t,s){var a,e=(null===(a=s.componentOptions)||void 0===a||null===(a=a.propsData)||void 0===a?void 0:a.value)||"";return"__add_stock_option__"===e||e.toLowerCase().includes(t.toLowerCase())},handleSymbolChange:function(t){var s=this;if("__add_stock_option__"===t)return this.showAddStockModal=!0,void this.$nextTick(function(){s.selectedSymbol=void 0});this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",t)},selectWatchlistItem:function(t){this.selectedSymbol="".concat(t.market,":").concat(t.symbol),this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error",this.$emit("symbol-change",this.selectedSymbol)},loadMarketData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){return(0,l.A)().w(function(s){while(1)switch(s.n){case 0:t.loadingMarket=!0,t.loadSentimentData(),t.loadIndicesData(),t.loadHeatmapData(),t.loadCalendarData();case 1:return s.a(2)}},s)}))()},loadSentimentData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingSentiment=!0,s.p=1,s.n=2,(0,b.EF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.fearGreed=(null===(e=a.data.fear_greed)||void 0===e?void 0:e.value)||null,t.marketData.vix=(null===(i=a.data.vix)||void 0===i?void 0:i.value)||null,t.marketData.dxy=(null===(r=a.data.dxy)||void 0===r?void 0:r.value)||null),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingSentiment=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadIndicesData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingIndices=!0,s.p=1,s.n=2,(0,b.yI)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.indices=a.data.indices||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingIndices=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadHeatmapData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingHeatmap=!0,s.p=1,s.n=2,(0,b.f$)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&null!==a&&void 0!==a&&a.data&&(t.marketData.heatmap={crypto:a.data.crypto||[],commodities:a.data.commodities||[],sectors:a.data.sectors||[],forex:a.data.forex||[]}),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingHeatmap=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},loadCalendarData:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.loadingCalendar=!0,s.p=1,s.n=2,(0,b.kF)();case 2:a=s.v,1===(null===a||void 0===a?void 0:a.code)&&(t.marketData.calendar=a.data||[]),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.p=4,t.loadingCalendar=!1,t.checkAllLoaded(),s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},checkAllLoaded:function(){this.loadingSentiment||this.loadingIndices||this.loadingHeatmap||this.loadingCalendar||(this.loadingMarket=!1)},getFearGreedClass:function(t){return t?t<=25?"extreme-fear":t<=45?"fear":t<=55?"neutral":t<=75?"greed":"extreme-greed":""},getVixLevel:function(t){return t?t<15?"low":t<25?"medium":"high":""},formatNum:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return void 0===t||null===t||isNaN(t)?"--":Number(t).toFixed(s)},getHeatmapStyle:function(t){var s=parseFloat(t)||0,a=Math.min(Math.abs(s)/5,1);return s>=0?{background:"rgba(34, 197, 94, ".concat(.15+.6*a,")"),color:s>2?"#fff":"#166534"}:{background:"rgba(239, 68, 68, ".concat(.15+.6*a,")"),color:s<-2?"#fff":"#991b1b"}},getCountryFlag:function(t){var s={US:"🇺🇸",CN:"🇨🇳",EU:"🇪🇺",JP:"🇯🇵",UK:"🇬🇧",DE:"🇩🇪",AU:"🇦🇺",CA:"🇨🇦"};return s[t]||"🌍"},formatCalendarDate:function(t){if(!t)return"";try{var s=new Date(t),a=new Date,e=new Date(a);if(e.setDate(e.getDate()+1),s.toDateString()===a.toDateString())return this.isZhLocale?"今天":"Today";if(s.toDateString()===e.toDateString())return this.isZhLocale?"明天":"Tmrw";var i=s.getMonth()+1,r=s.getDate();return"".concat(i,"/").concat(r)}catch(n){return t}},formatPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1e3?t.toFixed(0):t.toFixed(2):"--"},formatHeatmapPrice:function(t){return t?t>=1e4?"$"+(t/1e3).toFixed(1)+"K":t>=1e3?"$"+t.toFixed(0):t>=1?"$"+t.toFixed(2):"$"+t.toFixed(4):""},getHeatmapName:function(t){return"sectors"===this.heatmapType||"commodities"===this.heatmapType||"forex"===this.heatmapType?this.isZhLocale?t.name_cn||t.name:t.name_en||t.name:t.name},getImpactClass:function(t){return t.actual_impact||t.expected_impact||"neutral"},getMarketColor:function(t){var s={USStock:"green",Crypto:"purple",Forex:"gold",Futures:"cyan"};return s[t]||"default"},getCurrencySymbol:function(t){return"$"},formatCreditNum:function(t){if(void 0===t||null===t||""===t)return"--";var s=Number(t);return Number.isNaN(s)?String(t):Number.isInteger(s)?String(s):s.toFixed(2)},refreshUserInfoFromServer:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,u.ug)();case 1:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data)),s.n=3;break;case 2:s.p=2,s.v;case 3:return s.a(2)}},s,null,[[0,2]])}))()},startFastAnalysis:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,o,d,u,m,h,y,v,f,g,b,_;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(!t.analyzing){s.n=1;break}return s.a(2);case 1:if(t.selectedSymbol){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.message.selectSymbol")),s.a(2);case 2:return t.analyzing=!0,t.analysisError=null,t.analysisErrorTone="error",a=t.selectedSymbol.split(":"),e=(0,n.A)(a,2),i=e[0],r=e[1],o=t.$store.getters.lang||"zh-CN",s.p=3,s.n=4,p({market:i,symbol:r,language:o,timeframe:"1D"});case 4:if(d=s.v,!d||1!==d.code||!d.data){s.n=6;break}return u=(0,c.A)({},d.data),delete u.credits_charged,delete u.remaining_credits,t.analysisResult=u,m=d.data.remaining_credits,void 0!==m&&null!==m?t.$message.success(t.$t("fastAnalysis.analysisCompleteWithCredits",{remaining:t.formatCreditNum(m)})):t.$message.success(t.$t("dashboard.analysis.message.analysisComplete")),s.n=5,t.refreshUserInfoFromServer();case 5:s.n=7;break;case 6:throw new Error((null===d||void 0===d?void 0:d.msg)||"分析失败");case 7:s.n=9;break;case 8:s.p=8,_=s.v,v=null===_||void 0===_||null===(h=_.response)||void 0===h?void 0:h.status,f=(null===_||void 0===_||null===(y=_.response)||void 0===y?void 0:y.data)||{},g=f.msg,b=f.data,429===v&&b&&b.in_progress?(t.analysisErrorTone="warning",t.analysisError=t.$t("fastAnalysis.analysisInProgress"),t.$message.warning(t.analysisError)):400===v&&"Insufficient credits"===g?(t.analysisError=t.$t("fastAnalysis.insufficientCreditsDetail",{required:t.formatCreditNum(null===b||void 0===b?void 0:b.required),current:t.formatCreditNum(null===b||void 0===b?void 0:b.current),shortage:t.formatCreditNum(null===b||void 0===b?void 0:b.shortage)}),t.$message.error(t.analysisError)):(t.analysisError=g||(null===_||void 0===_?void 0:_.message)||t.$t("dashboard.analysis.message.analysisFailed"),t.$message.error(t.analysisError));case 9:return s.p=9,t.analyzing=!1,s.f(9);case 10:return s.a(2)}},s,null,[[3,8,9,10]])}))()},loadHistoryList:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return t.historyLoading=!0,s.p=1,s.n=2,v({page:t.historyPage,pagesize:t.historyPageSize});case 2:a=s.v,a&&1===a.code&&a.data&&(t.historyList=a.data.list||[],t.historyTotal=a.data.total||0),s.n=4;break;case 3:s.p=3,s.v,t.$message.error(t.$t("dashboard.analysis.message.loadHistoryFailed")||"加载历史记录失败");case 4:return s.p=4,t.historyLoading=!1,s.f(4);case 5:return s.a(2)}},s,null,[[1,3,4,5]])}))()},viewHistoryResult:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){return(0,l.A)().w(function(a){while(1)switch(a.n){case 0:if(!t.full_result){a.n=1;break}return s.analysisResult=t.full_result,s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1,a.a(2);case 1:s.analysisResult={decision:t.decision,confidence:t.confidence,summary:t.summary,market_data:{current_price:t.price,change_24h:0},trading_plan:{entry_price:t.price,stop_loss:.95*t.price,take_profit:1.05*t.price},scores:t.scores||{},reasons:t.reasons||[],risks:[],indicators:t.indicators||{},memory_id:t.id,analysis_time_ms:0},s.selectedSymbol="".concat(t.market,":").concat(t.symbol),s.showHistoryModal=!1;case 2:return a.a(2)}},a)}))()},deleteHistoryItem:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return a.p=0,a.n=1,f(t.id);case 1:e=a.v,e&&1===e.code?(s.$message.success(s.$t("dashboard.analysis.message.deleteSuccess")),s.loadHistoryList()):s.$message.error((null===e||void 0===e?void 0:e.msg)||s.$t("dashboard.analysis.message.deleteFailed")),a.n=3;break;case 2:a.p=2,a.v,s.$message.error(s.$t("dashboard.analysis.message.deleteFailed"));case 3:return a.a(2)}},a,null,[[0,2]])}))()},formatTime:function(t){if(!t)return"-";var s=new Date(1e3*t);return s.toLocaleString("zh-CN")},formatIsoTime:function(t){if(!t)return"-";var s=new Date(t);return s.toLocaleString("zh-CN")},getStatusColor:function(t){var s={pending:"orange",processing:"blue",completed:"green",failed:"red"};return s[t]||"default"},getStatusText:function(t){var s={pending:"dashboard.analysis.status.pending",processing:"dashboard.analysis.status.processing",completed:"dashboard.analysis.status.completed",failed:"dashboard.analysis.status.failed"},a=s[t];return a?this.$t(a):t},loadUserInfo:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.loadingUserInfo=!0,s.p=1,!t.storeUserInfo||!t.storeUserInfo.email){s.n=2;break}return t.localUserInfo=t.storeUserInfo,t.userId=t.storeUserInfo.id,t.loadingUserInfo=!1,t.loadWatchlist(),s.a(2);case 2:return s.n=3,(0,u.ug)();case 3:a=s.v,a&&1===a.code&&a.data&&(t.localUserInfo=a.data,t.userId=a.data.id,t.$store.commit("SET_INFO",a.data),t.loadWatchlist()),s.n=5;break;case 4:s.p=4,s.v;case 5:return s.p=5,t.loadingUserInfo=!1,s.f(5);case 6:return s.a(2)}},s,null,[[1,4,5,6]])}))()},loadWatchlist:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.userId){s.n=1;break}return s.a(2);case 1:return t.loadingWatchlist=!0,s.p=2,s.n=3,(0,m.Qo)({userid:t.userId});case 3:if(a=s.v,!a||1!==a.code||!a.data){s.n=4;break}return t.watchlist=a.data.map(function(t){return(0,c.A)((0,c.A)({},t),{},{price:0,change:0,changePercent:0})}),s.n=4,t.loadWatchlistPrices();case 4:s.n=6;break;case 5:s.p=5,s.v;case 6:return s.p=6,t.loadingWatchlist=!1,s.f(6);case 7:return s.a(2)}},s,null,[[2,5,6,7]])}))()},loadWatchlistPrices:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(t.watchlist&&0!==t.watchlist.length){s.n=1;break}return s.a(2);case 1:return s.p=1,a=t.watchlist.map(function(t){return{market:t.market,symbol:t.symbol}}),s.n=2,(0,m.ms)({watchlist:a});case 2:e=s.v,e&&1===e.code&&e.data&&(i={},r={},e.data.forEach(function(t){i["".concat(t.market,"-").concat(t.symbol)]=t,r["".concat(t.market,":").concat(t.symbol)]={price:t.price||0,change:t.changePercent||0}}),t.watchlistPrices=r,t.watchlist=t.watchlist.map(function(t){var s="".concat(t.market,"-").concat(t.symbol),a=i[s];return a?(0,c.A)((0,c.A)({},t),{},{price:a.price||0,change:a.change||0,changePercent:a.changePercent||0}):t})),s.n=4;break;case 3:s.p=3,s.v;case 4:return s.a(2)}},s,null,[[1,3]])}))()},startWatchlistPriceRefresh:function(){var t=this;this.watchlistPriceTimer=setInterval(function(){t.watchlist&&t.watchlist.length>0&&t.loadWatchlistPrices()},3e4),this.watchlist&&this.watchlist.length>0&&this.loadWatchlistPrices()},handleAddStock:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a,e,i,r,n,o,c;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:if(a="",e="",i="",!t.selectedSymbolForAdd){s.n=1;break}a=t.selectedSymbolForAdd.market,e=t.selectedSymbolForAdd.symbol.toUpperCase(),i=t.selectedSymbolForAdd.name||"",s.n=4;break;case 1:if(!t.symbolSearchKeyword||!t.symbolSearchKeyword.trim()){s.n=3;break}if(t.selectedMarketTab){s.n=2;break}return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),s.a(2);case 2:a=t.selectedMarketTab,e=t.symbolSearchKeyword.trim().toUpperCase(),i="",s.n=4;break;case 3:return t.$message.warning(t.$t("dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol")),s.a(2);case 4:return t.addingStock=!0,s.p=5,s.n=6,(0,m.dp)({userid:t.userId,market:a,symbol:e,name:i});case 6:if(r=s.v,!r||1!==r.code){s.n=8;break}return t.$message.success(t.$t("dashboard.analysis.message.addStockSuccess")),t.handleCloseAddStockModal(),s.n=7,t.loadWatchlist();case 7:s.n=9;break;case 8:t.$message.error((null===r||void 0===r?void 0:r.msg)||t.$t("dashboard.analysis.message.addStockFailed"));case 9:s.n=11;break;case 10:s.p=10,c=s.v,o=(null===c||void 0===c||null===(n=c.response)||void 0===n||null===(n=n.data)||void 0===n?void 0:n.msg)||(null===c||void 0===c?void 0:c.message)||t.$t("dashboard.analysis.message.addStockFailed"),t.$message.error(o);case 11:return s.p=11,t.addingStock=!1,s.f(11);case 12:return s.a(2)}},s,null,[[5,10,11,12]])}))()},handleCloseAddStockModal:function(){this.showAddStockModal=!1,this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.selectedMarketTab=this.marketTypes.length>0?this.marketTypes[0].value:""},handleMarketTabChange:function(t){this.selectedMarketTab=t,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.selectedSymbolForAdd=null,this.hasSearched=!1,this.loadHotSymbols(t)},handleSymbolSearchInput:function(t){var s=this,a=t.target.value;if(this.symbolSearchKeyword=a,this.searchTimer&&clearTimeout(this.searchTimer),!a||""===a.trim())return this.symbolSearchResults=[],this.hasSearched=!1,void(this.selectedSymbolForAdd=null);this.searchTimer=setTimeout(function(){s.searchSymbolsInModal(a)},500)},handleSearchOrInput:function(t){t&&t.trim()&&(this.selectedMarketTab?this.symbolSearchResults.length>0||(this.hasSearched&&0===this.symbolSearchResults.length?this.handleDirectAdd():this.searchSymbolsInModal(t)):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")))},searchSymbolsInModal:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t&&""!==t.trim()){a.n=1;break}return s.symbolSearchResults=[],s.hasSearched=!1,a.a(2);case 1:if(s.selectedMarketTab){a.n=2;break}return s.$message.warning(s.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")),a.a(2);case 2:return s.searchingSymbols=!0,s.hasSearched=!0,a.p=3,a.n=4,(0,m._3)({market:s.selectedMarketTab,keyword:t.trim(),limit:20});case 4:e=a.v,e&&1===e.code&&e.data&&e.data.length>0?s.symbolSearchResults=e.data:(s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""}),a.n=6;break;case 5:a.p=5,a.v,s.symbolSearchResults=[],s.selectedSymbolForAdd={market:s.selectedMarketTab,symbol:t.trim().toUpperCase(),name:""};case 6:return a.p=6,s.searchingSymbols=!1,a.f(6);case 7:return a.a(2)}},a,null,[[3,5,6,7]])}))()},handleDirectAdd:function(){this.symbolSearchKeyword&&this.symbolSearchKeyword.trim()?this.selectedMarketTab?this.selectedSymbolForAdd={market:this.selectedMarketTab,symbol:this.symbolSearchKeyword.trim().toUpperCase(),name:""}:this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseSelectMarket")):this.$message.warning(this.$t("dashboard.analysis.modal.addStock.pleaseEnterSymbol"))},selectSymbol:function(t){this.selectedSymbolForAdd={market:t.market,symbol:t.symbol,name:t.name||t.symbol}},loadHotSymbols:function(t){var s=this;return(0,o.A)((0,l.A)().m(function a(){var e;return(0,l.A)().w(function(a){while(1)switch(a.p=a.n){case 0:if(t||(t=s.selectedMarketTab||(s.marketTypes.length>0?s.marketTypes[0].value:"")),t){a.n=1;break}return a.a(2);case 1:return s.loadingHotSymbols=!0,a.p=2,a.n=3,(0,m.z6)({market:t,limit:10});case 3:e=a.v,e&&1===e.code&&e.data?s.hotSymbols=e.data:s.hotSymbols=[],a.n=5;break;case 4:a.p=4,a.v,s.hotSymbols=[];case 5:return a.p=5,s.loadingHotSymbols=!1,a.f(5);case 6:return a.a(2)}},a,null,[[2,4,5,6]])}))()},removeFromWatchlist:function(t){var s=arguments,a=this;return(0,o.A)((0,l.A)().m(function e(){var i,n,o;return(0,l.A)().w(function(e){while(1)switch(e.p=e.n){case 0:if(a.userId){e.n=1;break}return e.a(2);case 1:return i="object"===(0,r.A)(t)?t.symbol:t,n="object"===(0,r.A)(t)?t.market:s[1],e.p=2,e.n=3,(0,m.mk)({userid:a.userId,symbol:i,market:n});case 3:if(o=e.v,!o||1!==o.code){e.n=5;break}return a.$message.success(a.$t("dashboard.analysis.message.removeStockSuccess")),e.n=4,a.loadWatchlist();case 4:e.n=6;break;case 5:a.$message.error((null===o||void 0===o?void 0:o.msg)||a.$t("dashboard.analysis.message.removeStockFailed"));case 6:e.n=8;break;case 7:e.p=7,e.v,a.$message.error(a.$t("dashboard.analysis.message.removeStockFailed"));case 8:return e.a(2)}},e,null,[[2,7]])}))()},getMarketName:function(t){return this.$t("dashboard.analysis.market.".concat(t))||t},formatNumber:function(t){return"string"===typeof t?t:t.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})},loadMarketTypes:function(){var t=this;return(0,o.A)((0,l.A)().m(function s(){var a;return(0,l.A)().w(function(s){while(1)switch(s.p=s.n){case 0:return s.p=0,s.n=1,(0,m.iO)();case 1:a=s.v,a&&1===a.code&&a.data&&Array.isArray(a.data)?t.marketTypes=a.data.map(function(t){return{value:t.value,i18nKey:t.i18nKey||"dashboard.analysis.market.".concat(t.value)}}):t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}],s.n=3;break;case 2:s.p=2,s.v,t.marketTypes=[{value:"USStock",i18nKey:"dashboard.analysis.market.USStock"},{value:"Crypto",i18nKey:"dashboard.analysis.market.Crypto"},{value:"Forex",i18nKey:"dashboard.analysis.market.Forex"},{value:"Futures",i18nKey:"dashboard.analysis.market.Futures"}];case 3:t.marketTypes.length>0&&!t.selectedMarketTab&&(t.selectedMarketTab=t.marketTypes[0].value);case 4:return s.a(2)}},s,null,[[0,2]])}))()}},watch:{presetSymbol:function(t){t&&t!==this.selectedSymbol&&(this.selectedSymbol=t,this.analysisResult=null,this.analysisError=null,this.analysisErrorTone="error")},autoAnalyzeSignal:function(t){var s=this;t&&(this.presetSymbol&&this.presetSymbol!==this.selectedSymbol&&(this.selectedSymbol=this.presetSymbol),this.$nextTick(function(){s.startFastAnalysis()}))},showAddStockModal:function(t){t?(this.marketTypes.length>0&&!this.selectedMarketTab&&(this.selectedMarketTab=this.marketTypes[0].value),this.selectedMarketTab&&this.loadHotSymbols(this.selectedMarketTab)):(this.selectedSymbolForAdd=null,this.symbolSearchKeyword="",this.symbolSearchResults=[],this.hasSearched=!1,this.searchTimer&&(clearTimeout(this.searchTimer),this.searchTimer=null))}}},x=T,F=(0,A.A)(x,e,i,!1,null,"41eda137",null),M=F.exports},44146:function(t,s,a){a.d(s,{EF:function(){return o},f$:function(){return n},kF:function(){return l},r9:function(){return c},yI:function(){return r}});var e=a(75769),i="/api/global-market";function r(){return(0,e.Ay)({url:"".concat(i,"/overview"),method:"get"})}function n(){return(0,e.Ay)({url:"".concat(i,"/heatmap"),method:"get"})}function l(){return(0,e.Ay)({url:"".concat(i,"/calendar"),method:"get"})}function o(){return(0,e.Ay)({url:"".concat(i,"/sentiment"),method:"get"})}function c(t){return(0,e.Ay)({url:"".concat(i,"/opportunities"),method:"get",params:t})}},35038:function(t,s,a){a.d(s,{Qo:function(){return r},_3:function(){return d},dp:function(){return n},iO:function(){return c},mk:function(){return l},ms:function(){return o},z6:function(){return u}});var e=a(75769),i={GetWatchlist:"/api/market/watchlist/get",AddWatchlist:"/api/market/watchlist/add",RemoveWatchlist:"/api/market/watchlist/remove",GetWatchlistPrices:"/api/market/watchlist/prices",MultiAnalysis:"/api/analysis/multiAnalysis",CreateAnalysisTask:"/api/analysis/createTask",GetAnalysisTaskStatus:"/api/analysis/getTaskStatus",GetAnalysisHistoryList:"/api/analysis/getHistoryList",DeleteAnalysisTask:"/api/analysis/deleteTask",ReflectAnalysis:"/api/analysis/reflect",ChatMessage:"/api/ai/chat/message",GetChatHistory:"/api/ai/chat/history",SaveChatHistory:"/api/ai/chat/history/save",GetConfig:"/api/market/config",GetMenuFooterConfig:"/api/market/menuFooterConfig",GetMarketTypes:"/api/market/types",SearchSymbols:"/api/market/symbols/search",GetHotSymbols:"/api/market/symbols/hot"};function r(t){return(0,e.Ay)({url:i.GetWatchlist,method:"get",params:t})}function n(t){return(0,e.Ay)({url:i.AddWatchlist,method:"post",data:t})}function l(t){return(0,e.Ay)({url:i.RemoveWatchlist,method:"post",data:t})}function o(t){return(0,e.Ay)({url:i.GetWatchlistPrices,method:"get",params:{watchlist:JSON.stringify(t.watchlist||[])}})}function c(){return(0,e.Ay)({url:i.GetMarketTypes,method:"get"})}function d(t){return(0,e.Ay)({url:i.SearchSymbols,method:"get",params:t})}function u(t){return(0,e.Ay)({url:i.GetHotSymbols,method:"get",params:t})}}}]); \ No newline at end of file diff --git a/frontend/dist/js/958-legacy.623e6376.js b/frontend/dist/js/958-legacy.623e6376.js deleted file mode 100644 index 0bbe8d0..0000000 --- a/frontend/dist/js/958-legacy.623e6376.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self["webpackChunkvue_antd_pro"]=self["webpackChunkvue_antd_pro"]||[]).push([[958],{6717:function(t,a,e){e.r(a),e.d(a,{default:function(){return x}});e(62010),e(9868);var s=function(){var t=this,a=t._self._c;return a("div",{staticClass:"ai-asset-analysis-page",class:{"theme-dark":t.isDarkTheme}},[t.opportunities.length>0?a("div",{staticClass:"opp-section"},[a("div",{staticClass:"opp-header"},[a("span",{staticClass:"opp-title"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.title")))],1),a("span",{staticClass:"opp-header-right"},[a("span",{staticClass:"opp-update-hint"},[a("a-icon",{attrs:{type:"clock-circle"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.updateHint"))+" ")],1),a("a-button",{attrs:{type:"link",size:"small",icon:"reload",loading:t.oppLoading},on:{click:function(a){return t.loadOpportunities(!0)}}},[t._v(" "+t._s(t.$t("common.refresh")||"刷新")+" ")])],1)]),a("div",{staticClass:"opp-carousel-wrapper",on:{mouseenter:function(a){t.oppHover=!0},mouseleave:function(a){t.oppHover=!1}}},[a("div",{staticClass:"opp-track",class:{paused:t.oppHover},style:t.oppTrackStyle},t._l(t.carouselItems,function(e,s){return a("div",{key:"opp-"+s,staticClass:"opp-card",class:[e.impact,"market-"+(e.market||"").toLowerCase(),{"is-prediction-market":"PredictionMarket"===e.market}],on:{click:function(a){return t.analyzeOpportunity(e)}}},[a("div",{staticClass:"opp-top"},[a("span",{staticClass:"opp-symbol",class:{"prediction-title":"PredictionMarket"===e.market}},[t._v(" "+t._s("PredictionMarket"===e.market&&e.name||e.symbol)+" ")]),a("a-tag",{staticClass:"opp-market-tag",attrs:{color:t.getMarketTagColor(e.market),size:"small"}},[t._v(" "+t._s(t.getMarketLabel(e.market))+" ")])],1),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-price"},[t._v("$"+t._s(t.formatOppPrice(e.price)))]):a("div",{staticClass:"opp-price"},[t._v(t._s((e.price||0).toFixed(1))+"%")]),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-change",class:e.change_24h>=0?"up":"down"},[t._v(" "+t._s(e.change_24h>=0?"+":"")+t._s((e.change_24h||0).toFixed(1))+"% ")]):e.ai_analysis?a("div",{staticClass:"opp-change"},[a("a-tag",{attrs:{color:t.getRecommendationColor(e.ai_analysis.recommendation),size:"small"}},[t._v(" "+t._s(t.getRecommendationLabel(e.ai_analysis.recommendation))+" ")]),a("span",{staticStyle:{"margin-left":"8px","font-size":"12px",color:"rgba(0,0,0,0.65)"}},[t._v(" 机会评分: "+t._s(e.ai_analysis.opportunity_score.toFixed(0))+" ")])],1):t._e(),"PredictionMarket"!==e.market?a("div",{staticClass:"opp-signal"},[a("a-tag",{attrs:{color:t.getSignalColor(e.signal),size:"small"}},[t._v(t._s(t.getSignalLabel(e.signal)))])],1):t._e(),a("div",{staticClass:"opp-reason"},[t._v(t._s(t.getReasonText(e)))]),a("div",{staticClass:"opp-actions"},["PredictionMarket"!==e.market?a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.opportunities.analyze"))+" ")],1):a("span",{staticClass:"opp-action",on:{click:function(a){return a.stopPropagation(),t.analyzeOpportunity(e)}}},[a("a-icon",{attrs:{type:"link"}}),t._v(" "+t._s(t.$t("polymarket.action.viewDetail"))+" ")],1),"Crypto"===e.market?a("span",{staticClass:"opp-trade-btn",on:{click:function(a){return a.stopPropagation(),t.openQuickTradeFromOpp(e)}}},[a("a-icon",{attrs:{type:"transaction"}}),t._v(" "+t._s(t.$t("quickTrade.tradeNow"))+" ")],1):t._e()])])}),0)])]):t._e(),a("a-tooltip",{attrs:{title:t.$t("quickTrade.openPanel"),placement:"left"}},[!t.showQuickTrade&&t.currentAnalysisSymbol?a("div",{staticClass:"qt-floating-btn",on:{click:t.openQuickTradeFromCurrent}},[a("a-icon",{attrs:{type:"thunderbolt",theme:"filled"}})],1):t._e()]),a("quick-trade-panel",{attrs:{visible:t.showQuickTrade,symbol:t.qtSymbol,"preset-side":t.qtSide,"preset-price":t.qtPrice,source:t.qtSource,"market-type":"swap"},on:{close:function(a){t.showQuickTrade=!1},"order-success":t.onQuickTradeSuccess,"update:symbol":t.handleQuickTradeSymbolChange}}),a("a-card",{staticClass:"workspace-card",attrs:{bordered:!1}},[a("a-tabs",{staticClass:"workspace-tabs",attrs:{size:"large"},model:{value:t.activeTab,callback:function(a){t.activeTab=a},expression:"activeTab"}},[a("a-tab-pane",{key:"quick"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"thunderbolt"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.quick"))+" ")],1),a("div",{staticClass:"tab-body"},["quick"===t.activeTab?a("AnalysisView",{attrs:{embedded:!0,"preset-symbol":t.presetSymbol,"auto-analyze-signal":t.autoAnalyzeSignal},on:{"symbol-change":t.onAnalysisSymbolChange}}):t._e()],1)]),a("a-tab-pane",{key:"monitor"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"eye"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.monitor"))+" ")],1),a("div",{staticClass:"tab-body"},["monitor"===t.activeTab?a("PortfolioView",{attrs:{embedded:!0}}):t._e()],1)]),a("a-tab-pane",{key:"polymarket"},[a("span",{attrs:{slot:"tab"},slot:"tab"},[a("a-icon",{attrs:{type:"radar-chart"}}),t._v(" "+t._s(t.$t("aiAssetAnalysis.tabs.polymarket"))+" ")],1),a("div",{staticClass:"tab-body"},[a("div",{staticClass:"polymarket-tab-content"},[a("div",{staticClass:"polymarket-placeholder"},[a("div",{staticClass:"placeholder-icon"},[a("a-icon",{attrs:{type:"radar-chart"}})],1),a("h3",[t._v(t._s(t.$t("polymarket.analysis.title")))]),a("p",[t._v(t._s(t.$t("polymarket.analysis.description")))]),a("a-button",{staticStyle:{"margin-top":"16px"},attrs:{type:"primary",size:"large",icon:"thunderbolt"},on:{click:function(a){t.showPolymarketModal=!0}}},[t._v(" "+t._s(t.$t("polymarket.analysis.startAnalysis"))+" ")])],1)])])])],1)],1),a("PolymarketAnalysisModal",{attrs:{visible:t.showPolymarketModal},on:{close:function(a){t.showPolymarketModal=!1}}})],1)},i=[],n=e(81127),o=e(56252),r=e(2403),l=e(76338),c=(e(28706),e(74423),e(34782),e(27495),e(21699),e(25440),e(95353)),p=e(87125),u=e(16185),y=e(44146),d=e(83973),m=(e(42762),function(){var t=this,a=t._self._c;return a("a-modal",{attrs:{visible:t.visible,title:t.$t("polymarket.analysis.title"),width:900,footer:null,maskClosable:!1},on:{cancel:t.handleClose}},[a("div",{staticClass:"polymarket-analysis-modal"},[a("a-tabs",{attrs:{"default-active-key":"analyze"},on:{change:t.handleTabChange}},[a("a-tab-pane",{key:"analyze",attrs:{tab:t.$t("polymarket.analysis.tabAnalyze")}},[t.analysisResult?t._e():a("div",{staticClass:"input-section"},[a("a-alert",{staticStyle:{"margin-bottom":"16px"},attrs:{message:t.$t("polymarket.analysis.inputHint"),type:"info","show-icon":""}}),a("a-textarea",{attrs:{placeholder:t.$t("polymarket.analysis.inputPlaceholder"),rows:3,disabled:t.analyzing},on:{pressEnter:t.handleAnalyze},model:{value:t.inputText,callback:function(a){t.inputText=a},expression:"inputText"}}),a("div",{staticClass:"input-actions"},[a("a-button",{staticStyle:{width:"100%","margin-top":"12px"},attrs:{type:"primary",size:"large",icon:"thunderbolt",loading:t.analyzing,disabled:!t.inputText.trim()},on:{click:t.handleAnalyze}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzeButton"))+" ")])],1)],1),t.analysisResult?a("div",{staticClass:"result-section"},[a("div",{staticClass:"market-info"},[a("h3",[t._v(t._s(t.analysisResult.market.question))]),a("div",{staticClass:"market-meta"},[a("a-tag",{attrs:{color:t.getStatusColor(t.analysisResult.market.status)}},[t._v(" "+t._s(t.analysisResult.market.status)+" ")]),a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"percentage"}}),t._v(" "+t._s(t.analysisResult.market.current_probability)+"% ")],1),t.analysisResult.market.volume_24h?a("span",{staticClass:"meta-item"},[a("a-icon",{attrs:{type:"dollar"}}),t._v(" "+t._s(t.formatVolume(t.analysisResult.market.volume_24h))+" ")],1):t._e(),t.analysisResult.market.polymarket_url?a("a-button",{attrs:{type:"link",size:"small",icon:"link",href:t.analysisResult.market.polymarket_url,target:"_blank"}},[t._v(" "+t._s(t.$t("polymarket.analysis.viewOnPolymarket"))+" ")]):t._e()],1)]),a("div",{staticClass:"analysis-result"},[a("a-divider",[t._v(t._s(t.$t("polymarket.analysis.aiAnalysis")))]),a("div",{staticClass:"probability-comparison"},[a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.marketProbability")))]),a("div",{staticClass:"prob-value"},[t._v(t._s(t.analysisResult.analysis.market_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.aiPredictedProbability")))]),a("div",{staticClass:"prob-value ai-prob"},[t._v(t._s(t.analysisResult.analysis.ai_predicted_probability)+"%")])]),a("div",{staticClass:"prob-item"},[a("div",{staticClass:"prob-label"},[t._v(t._s(t.$t("polymarket.analysis.divergence")))]),a("div",{staticClass:"prob-value",class:t.getDivergenceClass(t.analysisResult.analysis.divergence)},[t._v(" "+t._s(t.analysisResult.analysis.divergence>=0?"+":"")+t._s(t.analysisResult.analysis.divergence.toFixed(2))+"% ")])])]),a("div",{staticClass:"recommendation-section"},[a("a-row",{attrs:{gutter:16}},[a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.recommendation")))]),a("a-tag",{staticStyle:{"font-size":"16px",padding:"4px 12px"},attrs:{color:t.getRecommendationColor(t.analysisResult.analysis.recommendation)}},[t._v(" "+t._s(t.getRecommendationLabel(t.analysisResult.analysis.recommendation))+" ")])],1)]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.confidenceScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.confidence_score.toFixed(0)))])])]),a("a-col",{attrs:{span:8}},[a("div",{staticClass:"rec-card"},[a("div",{staticClass:"rec-label"},[t._v(t._s(t.$t("polymarket.analysis.opportunityScore")))]),a("div",{staticClass:"rec-value"},[t._v(t._s(t.analysisResult.analysis.opportunity_score.toFixed(0)))])])])],1)],1),t.analysisResult.analysis.reasoning?a("div",{staticClass:"reasoning-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.reasoning")))]),a("p",{staticClass:"reasoning-text"},[t._v(t._s(t.analysisResult.analysis.reasoning))])]):t._e(),t.analysisResult.analysis.key_factors&&t.analysisResult.analysis.key_factors.length>0?a("div",{staticClass:"key-factors-section"},[a("h4",[t._v(t._s(t.$t("polymarket.analysis.keyFactors")))]),t._l(t.analysisResult.analysis.key_factors,function(e,s){return a("a-tag",{key:s,staticStyle:{margin:"4px"},attrs:{color:"blue"}},[t._v(" "+t._s(e)+" ")])})],2):t._e(),t.analysisResult.credits_charged>0?a("div",{staticClass:"billing-info"},[a("a-alert",{staticStyle:{"margin-top":"16px"},attrs:{message:t.$t("polymarket.analysis.creditsCharged",{credits:t.analysisResult.credits_charged}),type:"success","show-icon":""}}),void 0!==t.analysisResult.remaining_credits?a("div",{staticStyle:{"margin-top":"8px","text-align":"right",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.remainingCredits",{credits:t.analysisResult.remaining_credits.toFixed(0)}))+" ")]):t._e()],1):t._e()],1),a("div",{staticClass:"result-actions"},[a("a-button",{staticStyle:{"margin-right":"8px"},on:{click:t.handleNewAnalysis}},[t._v(" "+t._s(t.$t("polymarket.analysis.newAnalysis"))+" ")]),a("a-button",{attrs:{type:"primary"},on:{click:t.handleClose}},[t._v(" "+t._s(t.$t("common.close"))+" ")])],1)]):t._e(),t.analyzing?a("div",{staticClass:"loading-section"},[a("a-spin",{attrs:{size:"large"}}),a("p",{staticStyle:{"margin-top":"16px",color:"rgba(0,0,0,0.65)"}},[t._v(" "+t._s(t.$t("polymarket.analysis.analyzing"))+" ")])],1):t._e()]),a("a-tab-pane",{key:"history",attrs:{tab:t.$t("polymarket.analysis.tabHistory")}},[a("div",{staticClass:"history-section"},[a("a-spin",{attrs:{spinning:t.historyLoading}},[a("a-table",{attrs:{columns:t.historyColumns,"data-source":t.historyList,pagination:t.historyPagination,"row-key":function(t){return t.id},size:"small"},on:{change:t.handleHistoryTableChange},scopedSlots:t._u([{key:"market_title",fn:function(e,s){return[a("a-button",{staticStyle:{padding:"0"},attrs:{type:"link"},on:{click:function(a){return t.viewHistoryItem(s)}}},[t._v(" "+t._s(e)+" ")])]}},{key:"recommendation",fn:function(e){return[a("a-tag",{attrs:{color:t.getRecommendationColor(e)}},[t._v(" "+t._s(t.getRecommendationLabel(e))+" ")])]}},{key:"created_at",fn:function(a){return[t._v(" "+t._s(t.formatDateTime(a))+" ")]}}])})],1)],1)])],1)],1)])}),h=[],k=(e(26099),e(75769)),v="/api/polymarket";function g(t){return(0,k.Ay)({url:"".concat(v,"/analyze"),method:"post",data:t,timeout:12e4})}function _(t){return(0,k.Ay)({url:"".concat(v,"/history"),method:"get",params:t})}var b={name:"PolymarketAnalysisModal",props:{visible:{type:Boolean,default:!1}},data:function(){var t=this;return{inputText:"",analyzing:!1,analysisResult:null,activeTab:"analyze",historyLoading:!1,historyList:[],historyPagination:{current:1,pageSize:20,total:0,showSizeChanger:!0,showTotal:function(a){return t.$t("polymarket.analysis.historyTotal",{total:a})}},historyColumns:[]}},methods:{handleAnalyze:function(){var t=this;this.inputText.trim()?(this.analyzing=!0,this.analysisResult=null,g({input:this.inputText.trim(),language:this.$i18n.locale||"zh-CN"}).then(function(a){1===a.code?(t.analysisResult=a.data,t.$message.success(t.$t("polymarket.analysis.success"))):"Insufficient credits"===a.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(a.msg||t.$t("polymarket.analysis.failed"))}).catch(function(a){a.response&&a.response.data&&"Insufficient credits"===a.response.data.msg?(t.$message.error(t.$t("polymarket.analysis.insufficientCredits")),t.$router.push("/billing")):t.$message.error(t.$t("polymarket.analysis.failed"))}).finally(function(){t.analyzing=!1})):this.$message.warning(this.$t("polymarket.analysis.inputRequired"))},handleNewAnalysis:function(){this.inputText="",this.analysisResult=null},handleClose:function(){var t=this;this.$emit("close"),setTimeout(function(){t.inputText="",t.analysisResult=null,t.analyzing=!1},300)},getStatusColor:function(t){var a={active:"green",closed:"default",resolved:"blue"};return a[t]||"default"},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"orange"};return a[t]||"default"},getRecommendationLabel:function(t){var a={YES:this.$t("polymarket.analysis.recommendationYes"),NO:this.$t("polymarket.analysis.recommendationNo"),HOLD:this.$t("polymarket.analysis.recommendationHold")};return a[t]||t},getDivergenceClass:function(t){return t>5?"divergence-positive":t<-5?"divergence-negative":"divergence-neutral"},formatVolume:function(t){return t>=1e6?"$".concat((t/1e6).toFixed(2),"M"):t>=1e3?"$".concat((t/1e3).toFixed(2),"K"):"$".concat(t.toFixed(2))},handleTabChange:function(t){this.activeTab=t,"history"===t&&0===this.historyList.length&&this.loadHistory()},loadHistory:function(){var t=this;return(0,o.A)((0,n.A)().m(function a(){var e;return(0,n.A)().w(function(a){while(1)switch(a.p=a.n){case 0:return t.historyLoading=!0,a.p=1,a.n=2,_({page:t.historyPagination.current,page_size:t.historyPagination.pageSize});case 2:e=a.v,1===e.code&&e.data&&(t.historyList=e.data.items||[],t.historyPagination.total=e.data.total||0),a.n=4;break;case 3:a.p=3,a.v,t.$message.error(t.$t("polymarket.analysis.loadHistoryFailed"));case 4:return a.p=4,t.historyLoading=!1,a.f(4);case 5:return a.a(2)}},a,null,[[1,3,4,5]])}))()},handleHistoryTableChange:function(t){this.historyPagination.current=t.current,this.historyPagination.pageSize=t.pageSize,this.loadHistory()},viewHistoryItem:function(t){this.activeTab="analyze",this.analysisResult={market:{question:t.market_title,market_id:t.market_id,polymarket_url:t.market_url,current_probability:t.market_probability,status:"active"},analysis:{ai_predicted_probability:t.ai_predicted_probability,market_probability:t.market_probability,recommendation:t.recommendation,opportunity_score:t.opportunity_score,confidence_score:t.confidence_score}}},formatDateTime:function(t){if(!t)return"";var a=new Date(t);return a.toLocaleString("zh-CN"===this.$i18n.locale?"zh-CN":"en-US")}},mounted:function(){this.historyColumns=[{title:this.$t("polymarket.analysis.historyMarket"),dataIndex:"market_title",key:"market_title",scopedSlots:{customRender:"market_title"}},{title:this.$t("polymarket.analysis.historyRecommendation"),dataIndex:"recommendation",key:"recommendation",width:120,scopedSlots:{customRender:"recommendation"}},{title:this.$t("polymarket.analysis.historyOpportunityScore"),dataIndex:"opportunity_score",key:"opportunity_score",width:120,align:"right"},{title:this.$t("polymarket.analysis.historyCreatedAt"),dataIndex:"created_at",key:"created_at",width:180,scopedSlots:{customRender:"created_at"}}]}},f=b,C=e(845),S=(0,C.A)(f,m,h,!1,null,"41dfa054",null),$=S.exports,A={name:"AIAssetAnalysis",components:{AnalysisView:p["default"],PortfolioView:u["default"],QuickTradePanel:d.A,PolymarketAnalysisModal:$},data:function(){return{activeTab:"quick",opportunities:[],oppLoading:!1,oppHover:!1,presetSymbol:"",autoAnalyzeSignal:0,showQuickTrade:!1,qtSymbol:"",qtSide:"",qtPrice:0,qtSource:"ai_radar",currentAnalysisSymbol:"",currentAnalysisMarket:"",showPolymarketModal:!1}},computed:(0,l.A)((0,l.A)({},(0,c.aH)({navTheme:function(t){return t.app.theme}})),{},{isDarkTheme:function(){return"dark"===this.navTheme||"realdark"===this.navTheme},carouselItems:function(){return 0===this.opportunities.length?[]:[].concat((0,r.A)(this.opportunities),(0,r.A)(this.opportunities))},oppTrackStyle:function(){var t=3*this.opportunities.length;return{animationDuration:t+"s"}}}),created:function(){this.loadOpportunities()},methods:{loadOpportunities:function(){var t=arguments,a=this;return(0,o.A)((0,n.A)().m(function e(){var s,i,o;return(0,n.A)().w(function(e){while(1)switch(e.p=e.n){case 0:return s=t.length>0&&void 0!==t[0]&&t[0],a.oppLoading=!0,e.p=1,i=s?{force:!0}:{},e.n=2,(0,y.r9)(i);case 2:o=e.v,o&&1===o.code&&Array.isArray(o.data)&&(a.opportunities=o.data.slice(0,20)),e.n=4;break;case 3:e.p=3,e.v;case 4:return e.p=4,a.oppLoading=!1,e.f(4);case 5:return e.a(2)}},e,null,[[1,3,4,5]])}))()},getSignalColor:function(t){var a={overbought:"volcano",oversold:"green",bullish_momentum:"cyan",bearish_momentum:"red"};return a[t]||"default"},getSignalLabel:function(t){var a="aiAssetAnalysis.opportunities.signal.".concat(t),e=this.$t(a);return e!==a?e:t},getMarketTagColor:function(t){var a={Crypto:"purple",USStock:"green",Forex:"gold",PredictionMarket:"cyan"};return a[t]||"default"},getMarketLabel:function(t){var a="aiAssetAnalysis.opportunities.market.".concat(t),e=this.$t(a);return e!==a?e:t},getReasonText:function(t){var a=(t.market||"Crypto").toLowerCase(),e=t.signal||"",s="aiAssetAnalysis.opportunities.reason.".concat(a,".").concat(e),i=this.$t(s);if(i===s)return t.reason||"";var n=Math.abs(t.change_24h||0).toFixed(1),o=Math.abs(t.change_7d||0).toFixed(1);return i.replace("{change}",n).replace("{change7d}",o)},formatOppPrice:function(t){return t?t>=1e4?(t/1e3).toFixed(1)+"K":t>=1?t.toFixed(2):t.toFixed(4):"--"},analyzeOpportunity:function(t){var a=this;if("PredictionMarket"===t.market)return this.activeTab="polymarket",void(this.showPolymarketModal=!0);this.activeTab="quick";var e=t.market||"Crypto";this.presetSymbol="".concat(e,":").concat(t.symbol),this.$nextTick(function(){a.autoAnalyzeSignal++})},getRecommendationColor:function(t){var a={YES:"green",NO:"red",HOLD:"default"};return a[t]||"default"},getRecommendationLabel:function(t){return this.$t("polymarket.recommendation.".concat(t))||t},onAnalysisSymbolChange:function(t){if(!t)return this.currentAnalysisSymbol="",void(this.currentAnalysisMarket="");var a=t.split(":"),e=a.length>1?a[0]:"Crypto",s=a.length>1?a[1]:a[0];this.currentAnalysisMarket=e,this.currentAnalysisSymbol="Crypto"===e?s:""},openQuickTradeFromCurrent:function(){this.currentAnalysisSymbol&&(this.qtSymbol=this.currentAnalysisSymbol,this.qtSide="",this.qtPrice=0,this.qtSource="ai_analysis",this.showQuickTrade=!0)},openQuickTradeFromOpp:function(t){if("Crypto"===t.market){this.qtSymbol=t.symbol||"";var a=(t.signal||"").toLowerCase();a.includes("oversold")||a.includes("bullish")?this.qtSide="buy":a.includes("overbought")||a.includes("bearish")?this.qtSide="sell":this.qtSide="",this.qtPrice=t.price||0,this.qtSource="ai_radar",this.showQuickTrade=!0}},onQuickTradeSuccess:function(){this.$message.success(this.$t("quickTrade.orderSuccess"))},handleQuickTradeSymbolChange:function(t){t&&(this.qtSymbol=t)}}},T=A,w=(0,C.A)(T,s,i,!1,null,"20b827f5",null),x=w.exports}}]); \ No newline at end of file diff --git a/frontend/dist/js/app-legacy.73c5f6b0.js b/frontend/dist/js/app-legacy.73c5f6b0.js deleted file mode 100644 index e44b317..0000000 --- a/frontend/dist/js/app-legacy.73c5f6b0.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var e={35358:function(e,t,a){var i={"./af":25177,"./af.js":25177,"./ar":61509,"./ar-dz":41488,"./ar-dz.js":41488,"./ar-kw":58676,"./ar-kw.js":58676,"./ar-ly":42353,"./ar-ly.js":42353,"./ar-ma":24496,"./ar-ma.js":24496,"./ar-ps":6947,"./ar-ps.js":6947,"./ar-sa":82682,"./ar-sa.js":82682,"./ar-tn":89756,"./ar-tn.js":89756,"./ar.js":61509,"./az":95533,"./az.js":95533,"./be":28959,"./be.js":28959,"./bg":47777,"./bg.js":47777,"./bm":54903,"./bm.js":54903,"./bn":61290,"./bn-bd":17357,"./bn-bd.js":17357,"./bn.js":61290,"./bo":31545,"./bo.js":31545,"./br":11470,"./br.js":11470,"./bs":44429,"./bs.js":44429,"./ca":7306,"./ca.js":7306,"./cs":56464,"./cs.js":56464,"./cv":73635,"./cv.js":73635,"./cy":64226,"./cy.js":64226,"./da":93601,"./da.js":93601,"./de":77853,"./de-at":26111,"./de-at.js":26111,"./de-ch":54697,"./de-ch.js":54697,"./de.js":77853,"./dv":60708,"./dv.js":60708,"./el":54691,"./el.js":54691,"./en-au":53872,"./en-au.js":53872,"./en-ca":28298,"./en-ca.js":28298,"./en-gb":56195,"./en-gb.js":56195,"./en-ie":66584,"./en-ie.js":66584,"./en-il":65543,"./en-il.js":65543,"./en-in":9033,"./en-in.js":9033,"./en-nz":79402,"./en-nz.js":79402,"./en-sg":43004,"./en-sg.js":43004,"./eo":32934,"./eo.js":32934,"./es":97650,"./es-do":20838,"./es-do.js":20838,"./es-mx":17730,"./es-mx.js":17730,"./es-us":56575,"./es-us.js":56575,"./es.js":97650,"./et":3035,"./et.js":3035,"./eu":3508,"./eu.js":3508,"./fa":119,"./fa.js":119,"./fi":90527,"./fi.js":90527,"./fil":95995,"./fil.js":95995,"./fo":52477,"./fo.js":52477,"./fr":85498,"./fr-ca":26435,"./fr-ca.js":26435,"./fr-ch":37892,"./fr-ch.js":37892,"./fr.js":85498,"./fy":37071,"./fy.js":37071,"./ga":41734,"./ga.js":41734,"./gd":70217,"./gd.js":70217,"./gl":77329,"./gl.js":77329,"./gom-deva":32124,"./gom-deva.js":32124,"./gom-latn":93383,"./gom-latn.js":93383,"./gu":95050,"./gu.js":95050,"./he":11713,"./he.js":11713,"./hi":43861,"./hi.js":43861,"./hr":26308,"./hr.js":26308,"./hu":90609,"./hu.js":90609,"./hy-am":17160,"./hy-am.js":17160,"./id":74063,"./id.js":74063,"./is":89374,"./is.js":89374,"./it":88383,"./it-ch":21827,"./it-ch.js":21827,"./it.js":88383,"./ja":23827,"./ja.js":23827,"./jv":89722,"./jv.js":89722,"./ka":41794,"./ka.js":41794,"./kk":27088,"./kk.js":27088,"./km":96870,"./km.js":96870,"./kn":84451,"./kn.js":84451,"./ko":63164,"./ko.js":63164,"./ku":98174,"./ku-kmr":6181,"./ku-kmr.js":6181,"./ku.js":98174,"./ky":78474,"./ky.js":78474,"./lb":79680,"./lb.js":79680,"./lo":15867,"./lo.js":15867,"./lt":45766,"./lt.js":45766,"./lv":69532,"./lv.js":69532,"./me":58076,"./me.js":58076,"./mi":41848,"./mi.js":41848,"./mk":30306,"./mk.js":30306,"./ml":73739,"./ml.js":73739,"./mn":99053,"./mn.js":99053,"./mr":86169,"./mr.js":86169,"./ms":73386,"./ms-my":92297,"./ms-my.js":92297,"./ms.js":73386,"./mt":77075,"./mt.js":77075,"./my":72264,"./my.js":72264,"./nb":22274,"./nb.js":22274,"./ne":8235,"./ne.js":8235,"./nl":92572,"./nl-be":43784,"./nl-be.js":43784,"./nl.js":92572,"./nn":54566,"./nn.js":54566,"./oc-lnc":69330,"./oc-lnc.js":69330,"./pa-in":29849,"./pa-in.js":29849,"./pl":94418,"./pl.js":94418,"./pt":79834,"./pt-br":48303,"./pt-br.js":48303,"./pt.js":79834,"./ro":24457,"./ro.js":24457,"./ru":82271,"./ru.js":82271,"./sd":1221,"./sd.js":1221,"./se":33478,"./se.js":33478,"./si":17538,"./si.js":17538,"./sk":5784,"./sk.js":5784,"./sl":46637,"./sl.js":46637,"./sq":86794,"./sq.js":86794,"./sr":45719,"./sr-cyrl":3322,"./sr-cyrl.js":3322,"./sr.js":45719,"./ss":56e3,"./ss.js":56e3,"./sv":41011,"./sv.js":41011,"./sw":40748,"./sw.js":40748,"./ta":11025,"./ta.js":11025,"./te":11885,"./te.js":11885,"./tet":28861,"./tet.js":28861,"./tg":86571,"./tg.js":86571,"./th":55802,"./th.js":55802,"./tk":59527,"./tk.js":59527,"./tl-ph":29231,"./tl-ph.js":29231,"./tlh":31052,"./tlh.js":31052,"./tr":85096,"./tr.js":85096,"./tzl":79846,"./tzl.js":79846,"./tzm":81765,"./tzm-latn":97711,"./tzm-latn.js":97711,"./tzm.js":81765,"./ug-cn":48414,"./ug-cn.js":48414,"./uk":16618,"./uk.js":16618,"./ur":57777,"./ur.js":57777,"./uz":57609,"./uz-latn":72475,"./uz-latn.js":72475,"./uz.js":57609,"./vi":21135,"./vi.js":21135,"./x-pseudo":64051,"./x-pseudo.js":64051,"./yo":82218,"./yo.js":82218,"./zh-cn":52648,"./zh-cn.js":52648,"./zh-hk":1632,"./zh-hk.js":1632,"./zh-mo":31541,"./zh-mo.js":31541,"./zh-tw":50304,"./zh-tw.js":50304};function s(e){var t=o(e);return a(t)}function o(e){if(!a.o(i,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return i[e]}s.keys=function(){return Object.keys(i)},s.resolve=o,e.exports=s,s.id=35358},505:function(e,t,a){"use strict";a.d(t,{iD:function(){return o},ri:function(){return l},ug:function(){return r}});var i=a(75769),s={Login:"/api/auth/login",Logout:"/api/auth/logout",UserInfo:"/api/auth/info",UserMenu:"/user/nav"};function o(e){return(0,i.Ay)({url:s.Login,method:"post",data:e})}function n(){return(0,i.Ay)({url:s.UserInfo,method:"get",headers:{"Content-Type":"application/json;charset=UTF-8"}})}function r(){return n()}function l(){return(0,i.Ay)({url:s.Logout,method:"post",headers:{"Content-Type":"application/json;charset=UTF-8"}})}},36911:function(e,t,a){"use strict";a.d(t,{EM:function(){return o},GF:function(){return g},KP:function(){return v},Ke:function(){return d},Ox:function(){return r},P7:function(){return l},UH:function(){return m},WM:function(){return n},Yx:function(){return b},kv:function(){return h},mV:function(){return c},oK:function(){return y},tq:function(){return f},ul:function(){return A},v_:function(){return u},xQ:function(){return p}});var i=a(75769),s={strategies:"/api/strategies",strategyDetail:"/api/strategies/detail",createStrategy:"/api/strategies/create",batchCreateStrategies:"/api/strategies/batch-create",updateStrategy:"/api/strategies/update",stopStrategy:"/api/strategies/stop",startStrategy:"/api/strategies/start",deleteStrategy:"/api/strategies/delete",batchStartStrategies:"/api/strategies/batch-start",batchStopStrategies:"/api/strategies/batch-stop",batchDeleteStrategies:"/api/strategies/batch-delete",testConnection:"/api/strategies/test-connection",trades:"/api/strategies/trades",positions:"/api/strategies/positions",equityCurve:"/api/strategies/equityCurve",notifications:"/api/strategies/notifications",unreadNotificationCount:"/api/strategies/notifications/unread-count"};function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:s.strategies,method:"get",params:e})}function n(e){return(0,i.Ay)({url:s.createStrategy,method:"post",data:e})}function r(e){return(0,i.Ay)({url:s.batchCreateStrategies,method:"post",data:e})}function l(e,t){return(0,i.Ay)({url:s.updateStrategy,method:"put",params:{id:e},data:t})}function d(e){return(0,i.Ay)({url:s.stopStrategy,method:"post",params:{id:e}})}function c(e){return(0,i.Ay)({url:s.startStrategy,method:"post",params:{id:e}})}function u(e){return(0,i.Ay)({url:s.deleteStrategy,method:"delete",params:{id:e}})}function m(e){return(0,i.Ay)({url:s.batchStartStrategies,method:"post",data:e})}function g(e){return(0,i.Ay)({url:s.batchStopStrategies,method:"post",data:e})}function p(e){return(0,i.Ay)({url:s.batchDeleteStrategies,method:"delete",data:e})}function h(e){return(0,i.Ay)({url:s.testConnection,method:"post",data:{exchange_config:e}})}function f(e){return(0,i.Ay)({url:s.trades,method:"get",params:{id:e}})}function y(e){return(0,i.Ay)({url:s.positions,method:"get",params:{id:e}})}function b(e){return(0,i.Ay)({url:s.equityCurve,method:"get",params:{id:e}})}function v(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(0,i.Ay)({url:s.notifications,method:"get",params:e})}function A(){return(0,i.Ay)({url:s.unreadNotificationCount,method:"get"})}},45958:function(e,t,a){"use strict";var i=a(76338),s=a(1512),o=a(3508),n=a.n(o),r={antLocale:s.A,momentName:"eu",momentLocale:n()},l={"common.confirm":"Confirm","common.cancel":"Cancel","common.save":"Save","common.delete":"Delete","common.edit":"Edit","common.add":"Add","common.close":"Close","common.done":"Done","common.ok":"OK","common.loading":"Loading...","common.noData":"No data",submit:"Submit",save:"Save","submit.ok":"Submit successfully","save.ok":"Saved successfully","menu.welcome":"Welcome","menu.home":"Home","menu.dashboard":"Dashboard","menu.dashboard.analysis":"AI Analysis","menu.dashboard.aiAssetAnalysis":"AI Asset Analysis","menu.dashboard.aiQuant":"AI Quant","menu.dashboard.indicator":"Indicator Analysis","menu.dashboard.community":"Indicator Market","menu.dashboard.tradingAssistant":"Trading Assistant","menu.dashboard.portfolio":"Portfolio","menu.dashboard.globalMarket":"Global Market","menu.dashboard.polymarket":"Prediction Markets","menu.settings":"Settings","menu.dashboard.aiTradingAssistant":"AI Trading Assistant","menu.dashboard.signalRobot":"Signal Robot","menu.dashboard.monitor":"Monitor","menu.dashboard.workplace":"Workplace","aiAssetAnalysis.title":"AI Asset Analysis","aiAssetAnalysis.subtitle":"Unify portfolio monitoring, instant analysis, and scheduled tasks into one smooth workflow.","aiAssetAnalysis.actions.quickAnalysis":"Start Analysis Now","aiAssetAnalysis.actions.monitorTasks":"Manage Monitor Tasks","aiAssetAnalysis.actions.openStandalone":"Open Standalone Page","aiAssetAnalysis.quickBar.title":"Quick Analyze","aiAssetAnalysis.quickBar.placeholder":"Select a symbol from asset pool","aiAssetAnalysis.quickBar.useInQuick":"Use in Instant Analysis","aiAssetAnalysis.quickBar.runNow":"Analyze Now","aiAssetAnalysis.history.title":"Recent Analysis","aiAssetAnalysis.history.empty":"No analysis history yet","aiAssetAnalysis.actions.enterQuick":"Go to Instant Analysis","aiAssetAnalysis.actions.enterMonitor":"Go to Asset Pool & Tasks","aiAssetAnalysis.flow.poolTitle":"Build Asset Pool","aiAssetAnalysis.flow.poolDesc":"Add positions and watch targets first to build one unified analysis pool.","aiAssetAnalysis.flow.poolAction":"Manage Asset Pool","aiAssetAnalysis.flow.quickTitle":"Instant Analysis","aiAssetAnalysis.flow.quickDesc":"Run AI analysis for any symbol in one click and get suggestions quickly.","aiAssetAnalysis.flow.quickAction":"Run Analysis","aiAssetAnalysis.flow.autoTitle":"Scheduled Monitoring","aiAssetAnalysis.flow.autoDesc":"Set recurring AI analysis tasks and deliver reports through notification channels.","aiAssetAnalysis.flow.autoAction":"Configure Tasks","aiAssetAnalysis.tabs.quick":"Instant Analysis","aiAssetAnalysis.tabs.monitor":"Asset Pool & Scheduled Tasks","aiAssetAnalysis.tabLead.quick":"Best for ad-hoc decisions: select a symbol and analyze immediately.","aiAssetAnalysis.tabLead.monitor":"Best for continuous tracking: maintain positions and set monitor ranges/frequency.","aiAssetAnalysis.stats.totalAnalyses":"Total Analyses","aiAssetAnalysis.stats.accuracy":"Accuracy","aiAssetAnalysis.stats.avgReturn":"Avg Return","aiAssetAnalysis.stats.satisfaction":"Satisfaction","aiAssetAnalysis.stats.decisions":"Decision Dist.","aiAssetAnalysis.opportunities.title":"AI Opportunity Radar","aiAssetAnalysis.opportunities.empty":"No opportunities found","aiAssetAnalysis.opportunities.analyze":"Analyze","aiAssetAnalysis.opportunities.updateHint":"Updates hourly","aiAssetAnalysis.opportunities.signal.overbought":"Overbought","aiAssetAnalysis.opportunities.signal.oversold":"Oversold","aiAssetAnalysis.opportunities.signal.bullish_momentum":"Bullish","aiAssetAnalysis.opportunities.signal.bearish_momentum":"Bearish","aiAssetAnalysis.opportunities.market.Crypto":"🪙 Crypto","aiAssetAnalysis.opportunities.market.USStock":"📈 US Stock","aiAssetAnalysis.opportunities.market.Forex":"💱 Forex","aiAssetAnalysis.opportunities.market.PredictionMarket":"🎯 Prediction Market","aiAssetAnalysis.opportunities.reason.crypto.overbought":"24h +{change}%, 7d +{change7d}%, overbought risk","aiAssetAnalysis.opportunities.reason.crypto.bullish_momentum":"24h +{change}%, strong bullish momentum","aiAssetAnalysis.opportunities.reason.crypto.oversold":"24h -{change}%, possible oversold bounce","aiAssetAnalysis.opportunities.reason.crypto.bearish_momentum":"24h -{change}%, clear bearish trend","aiAssetAnalysis.opportunities.reason.usstock.overbought":"Day +{change}%, large gain, watch for pullback","aiAssetAnalysis.opportunities.reason.usstock.bullish_momentum":"Day +{change}%, strong bullish momentum","aiAssetAnalysis.opportunities.reason.usstock.oversold":"Day -{change}%, possible oversold bounce","aiAssetAnalysis.opportunities.reason.usstock.bearish_momentum":"Day -{change}%, clear bearish trend","aiAssetAnalysis.opportunities.reason.forex.overbought":"Day +{change}%, volatile, watch for reversal","aiAssetAnalysis.opportunities.reason.forex.bullish_momentum":"Day +{change}%, bullish momentum","aiAssetAnalysis.opportunities.reason.forex.oversold":"Day -{change}%, volatile, possible bounce","aiAssetAnalysis.opportunities.reason.forex.bearish_momentum":"Day -{change}%, clear bearish trend","aiAssetAnalysis.checkup.title":"Portfolio Checkup","aiAssetAnalysis.checkup.btn":"Checkup","aiAssetAnalysis.checkup.desc":"Run AI analysis on all positions in your portfolio to quickly understand the current status and get recommendations for each asset.","aiAssetAnalysis.checkup.start":"Start Checkup","aiAssetAnalysis.checkup.progress":"Analyzing {current}/{total}...","aiAssetAnalysis.checkup.noPositions":"No positions in your portfolio. Please add assets first.","aiAssetAnalysis.checkup.complete":"Checkup Complete","aiAssetAnalysis.checkup.failed":"Failed","aiAssetAnalysis.checkup.rerun":"Run Again","aiAssetAnalysis.search.hint":"Search","aiAssetAnalysis.search.placeholder":"Search any symbol... (Ctrl+K)","aiAssetAnalysis.search.noResults":"No results found. Try a different keyword.","menu.form":"Form","menu.form.basic-form":"Basic Form","menu.form.step-form":"Step Form","menu.form.step-form.info":"Step Form(write transfer information)","menu.form.step-form.confirm":"Step Form(confirm transfer information)","menu.form.step-form.result":"Step Form(finished)","menu.form.advanced-form":"Advanced Form","menu.list":"List","menu.list.table-list":"Search Table","menu.list.basic-list":"Basic List","menu.list.card-list":"Card List","menu.list.search-list":"Search List","menu.list.search-list.articles":"Search List(articles)","menu.list.search-list.projects":"Search List(projects)","menu.list.search-list.applications":"Search List(applications)","menu.profile":"Profile","menu.profile.basic":"Basic Profile","menu.profile.advanced":"Advanced Profile","menu.result":"Result","menu.result.success":"Success","menu.result.fail":"Fail","menu.exception":"Exception","menu.exception.not-permission":"403","menu.exception.not-find":"404","menu.exception.server-error":"500","menu.exception.trigger":"Trigger","menu.account":"Account","menu.account.center":"Account Center","menu.account.settings":"Account Settings","menu.account.trigger":"Trigger Error","menu.account.logout":"Logout","menu.wallet":"My Wallet","menu.docs":"Documentation","menu.docs.detail":"Doc Detail","menu.header.refreshPage":"Refresh Page","menu.invite.friends":"Invite Friends","app.setting.pagestyle":"Page Style Setting","app.setting.pagestyle.light":"Light Menu Style","app.setting.pagestyle.dark":"Dark Menu Style","app.setting.pagestyle.realdark":"RealDark style","app.setting.themecolor":"Theme Color","app.setting.navigationmode":"Navigation Mode","app.setting.sidemenu.nav":"Sidebar Navigation","app.setting.topmenu.nav":"Top Navigation","app.setting.content-width":"Content Width","app.setting.content-width.tooltip":"This setting is only effective for [Top Navigation]","app.setting.content-width.fixed":"Fixed","app.setting.content-width.fluid":"Fluid","app.setting.fixedheader":"Fixed Header","app.setting.fixedheader.tooltip":"Configurable when Header is fixed","app.setting.autoHideHeader":"Hide Header on Scroll","app.setting.fixedsidebar":"Fixed Sidebar Menu","app.setting.sidemenu":"Side Menu Layout","app.setting.topmenu":"Top Menu Layout","app.setting.othersettings":"Other Settings","app.setting.weakmode":"Weak Mode","app.setting.multitab":"Multi-Tab Mode","app.setting.copy":"Copy Setting","app.setting.loading":"Loading theme","app.setting.copyinfo":"copy success,please replace defaultSettings in src/config/defaultSettings.js","app.setting.copy.success":"Copy Success","app.setting.copy.fail":"Copy Failed","app.setting.theme.switching":"Switching theme...","app.setting.production.hint":"Setting panel shows in development environment only, please manually modify","app.setting.themecolor.daybreak":"Daybreak Blue (Default)","app.setting.themecolor.dust":"Dust Red","app.setting.themecolor.volcano":"Volcano","app.setting.themecolor.sunset":"Sunset Orange","app.setting.themecolor.cyan":"Cyan","app.setting.themecolor.green":"Polar Green","app.setting.themecolor.geekblue":"Geek Blue","app.setting.themecolor.purple":"Golden Purple","app.setting.tooltip":"Page Settings","notice.title":"Notifications","notice.empty":"No notifications","notice.markAllRead":"Mark all as read","notice.clear":"Clear all","notice.close":"Close","notice.justNow":"Just now","notice.minutesAgo":"minutes ago","notice.hoursAgo":"hours ago","notice.daysAgo":"days ago","notice.detailInfo":"Details","notice.aiDecision":"AI Decision","notice.confidence":"Confidence","notice.reasoning":"Reasoning","notice.symbol":"Symbol","notice.currentPrice":"Current Price","notice.triggerPrice":"Trigger Price","notice.action":"Action","notice.quantity":"Quantity","notice.viewPortfolio":"View Portfolio","notice.type.aiMonitor":"AI Monitor","notice.type.priceAlert":"Price Alert","notice.type.signal":"Trade Signal","notice.type.buy":"Buy Signal","notice.type.sell":"Sell Signal","notice.type.hold":"Hold Suggestion","notice.type.trade":"Trade Execution","notice.type.notification":"Notification","user.login.userName":"userName","user.login.password":"password","user.login.username.placeholder":"Account: admin","user.login.password.placeholder":"password: admin or ant.design","user.login.message-invalid-credentials":"Login failed, please check your email and verification code","user.login.message-invalid-verification-code":"Invalid verification code","user.login.tab-login-credentials":"Credentials","user.login.tab-login-email":"Email","user.login.tab-login-mobile":"Mobile number","user.login.captcha.placeholder":"Please enter captcha","user.login.mobile.placeholder":"Mobile number","user.login.mobile.verification-code.placeholder":"Verification code","user.login.email.placeholder":"Please enter your email address","user.login.email.verification-code.placeholder":"Please enter verification code","user.login.email.sending":"Sending verification code...","user.login.email.send-success-title":"Notice","user.login.email.send-success":"Verification code sent successfully, please check your email","user.login.sms.send-success":"Verification code sent successfully, please check your SMS","user.login.remember-me":"Remember me","user.login.forgot-password":"Forgot your password?","user.login.sign-in-with":"Sign in with","user.login.signup":"Sign up","user.login.login":"Login","user.register.register":"Register","user.register.email.placeholder":"Email","user.register.password.placeholder":"Password ","user.register.password.popover-message":"Please enter at least 6 characters. Please do not use passwords that are easy to guess. ","user.register.confirm-password.placeholder":"Confirm password","user.register.get-verification-code":"Get code","user.register.sign-in":"Already have an account?","user.register-result.msg":"Account:registered at {email}","user.register-result.activation-email":"The activation email has been sent to your email address and is valid for 24 hours. Please log in to the email in time and click on the link in the email to activate the account.","user.register-result.back-home":"Back to home","user.register-result.view-mailbox":"View mailbox","user.email.required":"Please enter your email!","user.email.wrong-format":"The email address is in the wrong format!","user.userName.required":"Please enter account name or email address","user.password.required":"Please enter your password!","user.password.twice.msg":"The passwords entered twice do not match!","user.password.strength.msg":"The password is not strong enough","user.password.strength.strong":"Strength: strong","user.password.strength.medium":"Strength: medium","user.password.strength.low":"Strength: low","user.password.strength.short":"Strength: too short","user.confirm-password.required":"Please confirm your password!","user.phone-number.required":"Please enter your phone number!","user.phone-number.wrong-format":"Please enter a valid phone number","user.verification-code.required":"Please enter the verification code!","user.captcha.required":"Please enter captcha!","user.login.infos":"QuantDinger is an AI multi-agent stock analysis tool that does not have securities investment consulting qualifications. All analysis results, scores, and reference opinions on the platform are automatically generated by AI based on historical data, and are only for learning, research, and technical exchanges, and do not constitute any investment advice or decision-making basis. Stock investment involves market risk, liquidity risk, policy risk and other risks, which may lead to losses of principal. Users should make independent decisions based on their risk tolerance capacity, and bear the consequences of any investment behavior and its results using this tool. Market risk, investment needs to be cautious.","user.login.tab-login-web3":"Web3 Login","user.login.web3.tip":"Sign in with your wallet via signature","user.login.web3.connect":"Connect wallet and login","user.login.web3.no-wallet":"No wallet detected","user.login.web3.no-address":"Wallet address not found","user.login.web3.nonce-failed":"Failed to get nonce","user.login.web3.verify-failed":"Signature verification failed","user.login.web3.success":"Login success","user.login.web3.failed":"Wallet login failed","nav.no_wallet":"No wallet detected","nav.copy":"Copy","nav.copy_success":"Copied","user.login.oauth.google":"Sign in with Google","user.login.oauth.github":"Sign in with GitHub","user.login.oauth.loading":"Redirecting to authorization page...","user.login.oauth.failed":"OAuth login failed","user.login.oauth.get-url-failed":"Failed to get authorization URL","user.login.subtitle":"driven quantitative insights for global markets","user.login.legal.title":"Legal Disclaimer","user.login.legal.view":"View Legal Disclaimer","user.login.legal.collapse":"Hide Legal Disclaimer","user.login.legal.agree":"I have read and agree to the Legal Disclaimer","user.login.legal.required":"Please read and check the Legal Disclaimer first","user.login.legal.content":"QuantDinger is an AI multi-agent stock analysis tool and does not provide investment advice. All analysis results, scores, and references are generated by AI based on historical data and are for learning, research, and technical exchange only. They do not constitute investment advice or a basis for decision-making. Stock investments involve market, liquidity, and policy risks, which may lead to loss of principal. Users should make independent decisions based on their risk tolerance and bear the consequences of any investment behavior and results using this tool.","user.login.privacy.title":"Privacy Policy","user.login.privacy.view":"View Privacy Policy","user.login.privacy.collapse":"Hide Privacy Policy","user.login.privacy.content":"We value your privacy and data protection. (1) Scope of collection: We only collect information necessary to provide the service (e.g., email, mobile number, country code, Web3 wallet address) and limited logs/device data. (2) Purpose of use: Account login and security verification, feature provisioning, troubleshooting, and compliance requirements. (3) Storage & security: Data is encrypted and access-controlled to prevent unauthorized access, disclosure, or loss. (4) Sharing & third parties: We do not share personal data with third parties except as required by law or to deliver the service; where third-party services are involved (e.g., wallets, SMS providers), processing is limited to the minimum scope required. (5) Cookies/local storage: Used for session and login state (e.g., tokens, PHPSESSID). You may clear or restrict them in your browser. (6) Your rights: You may exercise rights of access, correction, deletion, and consent withdrawal as permitted by law. (7) Changes & notices: We will provide prominent notice for updates. Continued use indicates that you have read and agreed to the updated terms. If you do not agree, please stop using the service and contact us.","user.login.username":"Username","user.login.usernameRequired":"Please enter username","user.login.passwordRequired":"Please enter password","user.login.tab":"Login","user.login.submit":"Login","user.login.register":"Create Account","user.login.forgotPassword":"Forgot Password?","user.login.orLoginWith":"Or login with","user.login.methodPassword":"Password","user.login.methodCode":"Email Code","user.login.email":"Email","user.login.emailRequired":"Please enter email","user.login.emailInvalid":"Invalid email format","user.login.verificationCode":"Verification Code","user.login.codeRequired":"Please enter verification code","user.login.sendCode":"Send","user.login.codeSent":"Verification code sent","user.login.codeLoginHint":"New users will be auto-registered","user.login.welcomeNew":"Welcome!","user.login.accountCreated":"Your account has been created","user.oauth.processing":"Processing login...","user.oauth.error.missing_params":"Missing required parameters","user.oauth.error.invalid_state":"Invalid state parameter","user.oauth.error.user_creation_failed":"Failed to create user","user.oauth.error.server_error":"Server error","user.register.tab":"Register","user.register.title":"Create Account","user.register.email":"Email","user.register.emailRequired":"Please enter email","user.register.emailInvalid":"Invalid email format","user.register.verificationCode":"Verification Code","user.register.codeRequired":"Please enter verification code","user.register.sendCode":"Send Code","user.register.codeSent":"Verification code sent","user.register.username":"Username","user.register.usernameRequired":"Please enter username","user.register.usernameLength":"Username must be 3-30 characters","user.register.usernamePattern":"Start with letter, letters/numbers/underscore only","user.register.password":"Password","user.register.passwordRequired":"Please enter password","user.register.confirmPassword":"Confirm Password","user.register.confirmPasswordRequired":"Please confirm password","user.register.passwordMismatch":"Passwords do not match","user.register.submit":"Create Account","user.register.haveAccount":"Already have an account?","user.register.login":"Login","user.register.success":"Registration successful","user.register.pleaseLogin":"Please login with your new account","user.register.pwdMinLength":"At least 8 characters","user.register.pwdUppercase":"At least one uppercase letter","user.register.pwdLowercase":"At least one lowercase letter","user.register.pwdNumber":"At least one number","user.resetPassword.title":"Reset Password","user.resetPassword.email":"Email","user.resetPassword.emailRequired":"Please enter email","user.resetPassword.emailInvalid":"Invalid email format","user.resetPassword.verificationCode":"Verification Code","user.resetPassword.codeRequired":"Please enter verification code","user.resetPassword.sendCode":"Send Code","user.resetPassword.codeSent":"Verification code sent","user.resetPassword.next":"Next","user.resetPassword.backToLogin":"Back to Login","user.resetPassword.resettingFor":"Resetting password for","user.resetPassword.newPassword":"New Password","user.resetPassword.passwordRequired":"Please enter new password","user.resetPassword.confirmPassword":"Confirm New Password","user.resetPassword.confirmPasswordRequired":"Please confirm password","user.resetPassword.submit":"Reset Password","user.resetPassword.back":"Back","user.resetPassword.successTitle":"Password Reset Successful","user.resetPassword.successSubtitle":"You can now login with your new password","user.resetPassword.goToLogin":"Go to Login","user.security.retry":"Retry","profile.passwordHintNew":"For security, email verification is required to change password. Password must be at least 8 characters with uppercase, lowercase, and number.","profile.verificationCode":"Verification Code","profile.codeRequired":"Please enter verification code","profile.codePlaceholder":"Enter verification code","profile.sendCode":"Send Code","profile.codeSent":"Verification code sent","profile.codeWillSendTo":"Code will be sent to","profile.noEmailWarning":"Please set your email first in Basic Info tab","account.basicInfo":"Basic Information","account.id":"User ID","account.username":"Username","account.nickname":"Nickname","account.email":"Email","account.mobile":"Mobile","account.web3address":"Wallet Address","account.pid":"Referrer ID","account.level":"Level","account.money":"Balance","account.qdtBalance":"QDT Balance","account.score":"Score","account.createtime":"Registration Time","account.inviteLink":"Invite Link","account.recharge":"Recharge","account.rechargeTip":"Please scan the QR code below with WeChat or Alipay to recharge","account.qrCodePlaceholder":"QR Code Placeholder (Mock)","account.rechargeAmount":"Recharge Amount","account.enterAmount":"Please enter recharge amount","account.rechargeHint":"Minimum recharge amount: 1 QDT","account.confirmRecharge":"Confirm Recharge","account.enterValidAmount":"Please enter a valid recharge amount","account.rechargeSuccess":"Recharge successful! Recharged {amount} QDT","account.settings.menuMap.basic":"Basic Settings","account.settings.menuMap.security":"Security Settings","account.settings.menuMap.notification":"New Message Notification","account.settings.menuMap.moneyLog":"Transaction History","account.moneyLog.empty":"No transaction history","account.moneyLog.total":"Total {total} records","account.moneyLog.type.purchase":"Purchase Indicator","account.moneyLog.type.recharge":"Recharge","account.moneyLog.type.refund":"Refund","account.moneyLog.type.reward":"Reward","account.moneyLog.type.income":"Indicator Income","account.moneyLog.type.commission":"Platform Fee","wallet.balance":"QDT Balance","wallet.recharge":"Recharge","wallet.withdraw":"Withdraw","wallet.filter":"Filter","wallet.reset":"Reset","wallet.totalRecharge":"Total Recharge","wallet.totalWithdraw":"Total Withdraw","wallet.totalIncome":"Total Income","wallet.records":"Trading Records & Transaction History","wallet.tradingRecords":"Trading Records","wallet.moneyLog":"Transaction History","wallet.rechargeTip":"Please scan the QR code below with WeChat or Alipay to recharge","wallet.qrCodePlaceholder":"QR Code Placeholder (Simulated)","wallet.rechargeAmount":"Recharge Amount","wallet.enterAmount":"Please enter recharge amount","wallet.rechargeHint":"Minimum recharge amount: 1 QDT","wallet.confirmRecharge":"Confirm Recharge","wallet.enterValidAmount":"Please enter a valid recharge amount","wallet.rechargeSuccess":"Recharge successful! Recharged {amount} QDT","wallet.rechargeFailed":"Recharge failed","wallet.withdrawTip":"Please enter withdrawal amount and address","wallet.withdrawAmount":"Withdrawal Amount","wallet.enterWithdrawAmount":"Please enter withdrawal amount","wallet.withdrawHint":"Minimum withdrawal amount: 1 QDT","wallet.withdrawAddress":"Withdrawal Address (Optional)","wallet.enterWithdrawAddress":"Please enter withdrawal address","wallet.confirmWithdraw":"Confirm Withdrawal","wallet.enterValidWithdrawAmount":"Please enter a valid withdrawal amount","wallet.insufficientBalance":"Insufficient balance","wallet.withdrawSuccess":"Withdrawal successful! Withdrew {amount} QDT","wallet.withdrawFailed":"Withdrawal failed","wallet.noTradingRecords":"No trading records","wallet.noMoneyLog":"No transaction history","wallet.loadTradingRecordsFailed":"Failed to load trading records","wallet.loadMoneyLogFailed":"Failed to load transaction history","wallet.moneyLogTotal":"Total {total} records","wallet.moneyLogTypeTitle":"Type","wallet.moneyLogType.all":"All types","wallet.table.time":"Time","wallet.table.type":"Type","wallet.table.price":"Price","wallet.table.amount":"Amount","wallet.table.money":"Amount","wallet.table.balance":"Balance","wallet.table.memo":"Memo","wallet.table.value":"Value","wallet.table.profit":"P/L","wallet.table.commission":"Commission","wallet.table.total":"Total {total} records","wallet.tradeType.buy":"Buy","wallet.tradeType.sell":"Sell","wallet.tradeType.liquidation":"Liquidation","wallet.tradeType.openLong":"Open Long","wallet.tradeType.addLong":"Add Long","wallet.tradeType.closeLong":"Close Long","wallet.tradeType.closeLongStop":"Stop Loss Close Long","wallet.tradeType.closeLongProfit":"Take Profit Close Long","wallet.tradeType.openShort":"Open Short","wallet.tradeType.addShort":"Add Short","wallet.tradeType.closeShort":"Close Short","wallet.tradeType.closeShortStop":"Stop Loss Close Short","wallet.tradeType.closeShortProfit":"Take Profit Close Short","wallet.moneyLogType.purchase":"Purchase Indicator","wallet.moneyLogType.recharge":"Recharge","wallet.moneyLogType.withdraw":"Withdraw","wallet.moneyLogType.refund":"Refund","wallet.moneyLogType.reward":"Reward","wallet.moneyLogType.income":"Income","wallet.moneyLogType.commission":"Commission","wallet.web3Address.required":"Please fill in Web3 wallet address first","wallet.web3Address.requiredDescription":"You need to bind your Web3 wallet address before recharging to receive deposits","wallet.web3Address.placeholder":"Please enter your Web3 wallet address (starts with 0x)","wallet.web3Address.save":"Save Wallet Address","wallet.web3Address.saveSuccess":"Wallet address saved successfully","wallet.web3Address.saveFailed":"Failed to save wallet address","wallet.web3Address.invalidFormat":"Please enter a valid Web3 wallet address (Ethereum format: 42 characters starting with 0x, or TRC20 format: 34 characters starting with T)","wallet.selectCoin":"Select Coin","wallet.selectChain":"Select Chain","wallet.chain.eth":"ETH(ERC20)","wallet.chain.trc20":"TRC20","wallet.chain.bsc":"BSC","wallet.targetQdtAmount":"Target QDT Amount (Optional)","wallet.targetQdtAmount.placeholder":"Enter the QDT amount you want to exchange, current QDT price: {price} USDT","wallet.targetQdtAmount.requiredUsdt":"Required USDT: {amount}","wallet.rechargeAddress":"Recharge Address","wallet.copyAddress":"Copy","wallet.copySuccess":"Copied successfully!","wallet.copyFailed":"Copy failed, please copy manually","wallet.rechargeAddressHint":"Please ensure you use {chain} chain to recharge {coin} to this address","wallet.qdtPrice.loading":"Loading...","wallet.rechargeTip.new":"Please select coin and chain, then scan the QR code below to recharge","wallet.exchangeRate":"1 QDT ≈ {rate} USDT","wallet.withdrawableAmount":"Withdrawable Amount","wallet.totalBalance":"Total Balance","wallet.insufficientWithdrawable":"Insufficient withdrawable amount, current withdrawable: {amount} QDT","wallet.withdrawAddressRequired":"Please enter withdrawal address","wallet.withdrawAddressHint":"Please ensure the address is correct, withdrawal cannot be revoked","wallet.withdrawSubmitSuccess":"Withdrawal application submitted successfully, please wait for review","menu.footer.contactUs":"Contact Us","menu.footer.getSupport":"Get Support","menu.footer.socialAccounts":"Social Accounts","menu.footer.userAgreement":"User Agreement","menu.footer.privacyPolicy":"Privacy Policy","menu.footer.support":"Support","menu.footer.featureRequest":"Feature request","menu.footer.email":"Email","menu.footer.liveChat":"24/7 live chat","dashboard.analysis.title":"Multi-Dimensional Analysis","dashboard.analysis.subtitle":"AI-Powered Comprehensive Financial Analysis Platform","dashboard.analysis.selectSymbol":"Select or enter symbol code","dashboard.analysis.selectModel":"Select Model","dashboard.analysis.startAnalysis":"Start Analysis","dashboard.analysis.history":"History","dashboard.analysis.tab.overview":"Overview","dashboard.analysis.tab.fundamental":"Fundamental","dashboard.analysis.tab.technical":"Technical","dashboard.analysis.tab.news":"News","dashboard.analysis.tab.sentiment":"Sentiment","dashboard.analysis.tab.risk":"Risk","dashboard.analysis.tab.debate":"Debate","dashboard.analysis.tab.decision":"Final Decision","dashboard.analysis.empty.selectSymbol":"Select Symbol to Start Analysis","dashboard.analysis.empty.selectSymbolDesc":"Select from watchlist or enter symbol code to get multi-dimensional AI analysis report","dashboard.analysis.empty.startAnalysis":'Click "Start Analysis" button to perform multi-dimensional analysis',"dashboard.analysis.empty.startAnalysisDesc":"We will provide comprehensive analysis from multiple dimensions including fundamental, technical, news, sentiment and risk","dashboard.analysis.empty.noData":"No {type} analysis data available, please perform comprehensive analysis first","dashboard.analysis.empty.noWatchlist":"No watchlist items","dashboard.analysis.empty.noHistory":"No history records","dashboard.analysis.empty.watchlistHint":"No watchlist, please","dashboard.analysis.empty.noDebateData":"No debate data available","dashboard.analysis.empty.noDecisionData":"No decision data available","dashboard.analysis.empty.selectAgent":"Please select an Agent to view analysis results","dashboard.analysis.loading.analyzing":"Analyzing, please wait...","dashboard.analysis.loading.fundamental":"Analyzing fundamental data...","dashboard.analysis.loading.technical":"Analyzing technical indicators...","dashboard.analysis.loading.news":"Analyzing news data...","dashboard.analysis.loading.sentiment":"Analyzing market sentiment...","dashboard.analysis.loading.risk":"Assessing risks...","dashboard.analysis.loading.debate":"Debating...","dashboard.analysis.loading.decision":"Generating final decision...","dashboard.analysis.score.overall":"Overall Score","dashboard.analysis.score.recommendation":"Recommendation","dashboard.analysis.score.confidence":"Confidence","dashboard.analysis.dimension.fundamental":"Fundamental","dashboard.analysis.dimension.technical":"Technical","dashboard.analysis.dimension.news":"News","dashboard.analysis.dimension.sentiment":"Sentiment","dashboard.analysis.dimension.risk":"Risk","dashboard.analysis.card.dimensionScores":"Dimension Scores","dashboard.analysis.card.overviewReport":"Overview Report","dashboard.analysis.card.financialMetrics":"Financial Metrics","dashboard.analysis.card.fundamentalReport":"Fundamental Analysis Report","dashboard.analysis.card.technicalIndicators":"Technical Indicators","dashboard.analysis.card.technicalReport":"Technical Analysis Report","dashboard.analysis.card.newsList":"Related News","dashboard.analysis.card.newsReport":"News Analysis Report","dashboard.analysis.card.sentimentIndicators":"Sentiment Indicators","dashboard.analysis.card.sentimentReport":"Sentiment Analysis Report","dashboard.analysis.card.riskMetrics":"Risk Metrics","dashboard.analysis.card.riskReport":"Risk Assessment Report","dashboard.analysis.card.bullView":"Bullish View (Bull)","dashboard.analysis.card.bearView":"Bearish View (Bear)","dashboard.analysis.card.researchConclusion":"Researcher Conclusion","dashboard.analysis.card.traderPlan":"Trader Plan","dashboard.analysis.card.riskDebate":"Risk Committee Debate","dashboard.analysis.card.finalDecision":"Final Decision","dashboard.analysis.card.tradePlanDetail":"Trading Plan Details","dashboard.analysis.tradingPlan.entry_price":"Entry Price","dashboard.analysis.tradingPlan.position_size":"Position Size","dashboard.analysis.tradingPlan.stop_loss":"Stop Loss","dashboard.analysis.tradingPlan.take_profit":"Take Profit","dashboard.analysis.label.confidence":"Confidence","dashboard.analysis.label.keyPoints":"Key Points","dashboard.analysis.label.riskWarning":"Risk Warning","dashboard.analysis.risk.risky":"Aggressive View (Risky)","dashboard.analysis.risk.neutral":"Neutral View (Neutral)","dashboard.analysis.risk.safe":"Conservative View (Safe)","dashboard.analysis.risk.conclusion":"Conclusion","dashboard.analysis.feature.fundamental":"Fundamental Analysis","dashboard.analysis.feature.technical":"Technical Analysis","dashboard.analysis.feature.news":"News Analysis","dashboard.analysis.feature.sentiment":"Sentiment Analysis","dashboard.analysis.feature.risk":"Risk Assessment","dashboard.analysis.watchlist.title":"My Watchlist","dashboard.analysis.watchlist.add":"Add","dashboard.analysis.watchlist.addStock":"Add Stock","dashboard.analysis.modal.addStock.title":"Add to Watchlist","dashboard.analysis.modal.addStock.confirm":"Confirm","dashboard.analysis.modal.addStock.cancel":"Cancel","dashboard.analysis.modal.addStock.market":"Market Type","dashboard.analysis.modal.addStock.marketPlaceholder":"Please select market","dashboard.analysis.modal.addStock.marketRequired":"Please select market type","dashboard.analysis.modal.addStock.symbol":"Symbol","dashboard.analysis.modal.addStock.symbolPlaceholder":"e.g.: AAPL, TSLA, GOOGL, 000001, BTC","dashboard.analysis.modal.addStock.symbolRequired":"Please enter symbol code","dashboard.analysis.modal.addStock.searchPlaceholder":"Search symbol code or name","dashboard.analysis.modal.addStock.searchOrInputPlaceholder":"Search or enter symbol code (e.g.: AAPL, BTC/USDT, EUR/USD)","dashboard.analysis.modal.addStock.searchOrInputHint":"Search in database or enter code directly (name will be fetched automatically)","dashboard.analysis.modal.addStock.search":"Search","dashboard.analysis.modal.addStock.searchResults":"Search Results","dashboard.analysis.modal.addStock.hotSymbols":"Hot Symbols","dashboard.analysis.modal.addStock.noHotSymbols":"No hot symbols available","dashboard.analysis.modal.addStock.selectedSymbol":"Selected Symbol","dashboard.analysis.modal.addStock.pleaseSelectSymbol":"Please select a symbol first","dashboard.analysis.modal.addStock.pleaseSelectOrEnterSymbol":"Please select a symbol or enter symbol code","dashboard.analysis.modal.addStock.pleaseEnterSymbol":"Please enter symbol code","dashboard.analysis.modal.addStock.pleaseSelectMarket":"Please select market type first","dashboard.analysis.modal.addStock.searchFailed":"Search failed, please try again later","dashboard.analysis.modal.addStock.noSearchResults":"No matching symbols found","dashboard.analysis.modal.addStock.willAutoFetchName":"Name will be fetched automatically","dashboard.analysis.modal.addStock.addDirectly":"Add Directly","dashboard.analysis.modal.addStock.nameWillBeFetched":"Name will be fetched automatically when adding","dashboard.analysis.market.USStock":"US Stock","dashboard.analysis.market.Crypto":"Cryptocurrency","dashboard.analysis.market.Forex":"Forex","dashboard.analysis.market.Futures":"Futures","dashboard.analysis.modal.history.title":"Analysis History","dashboard.analysis.modal.history.viewResult":"View Result","dashboard.analysis.modal.history.completeTime":"Complete Time","dashboard.analysis.modal.history.error":"Error","dashboard.analysis.status.pending":"Pending","dashboard.analysis.status.processing":"Processing","dashboard.analysis.status.completed":"Completed","dashboard.analysis.status.failed":"Failed","dashboard.analysis.message.selectSymbol":"Please select a symbol first","dashboard.analysis.message.taskCreated":"Analysis task created, executing in background...","dashboard.analysis.message.analysisComplete":"Analysis Complete","dashboard.analysis.message.analysisCompleteCache":"Analysis Complete (Using Cache)","dashboard.analysis.message.analysisFailed":"Analysis failed, please try again later","dashboard.analysis.message.addStockSuccess":"Added successfully","dashboard.analysis.message.addStockFailed":"Failed to add","dashboard.analysis.message.removeStockSuccess":"Removed successfully","dashboard.analysis.message.removeStockFailed":"Failed to remove","dashboard.analysis.message.resumingAnalysis":"Resuming analysis task...","dashboard.analysis.message.deleteSuccess":"Deleted successfully","dashboard.analysis.message.deleteFailed":"Failed to delete","dashboard.analysis.modal.history.delete":"Delete","dashboard.analysis.modal.history.deleteConfirm":"Are you sure you want to delete this analysis record?","dashboard.analysis.test":"Gongzhuan No.{no} shop","dashboard.analysis.introduce":"Introduce","dashboard.analysis.total-sales":"Total Sales","dashboard.analysis.day-sales":"Daily Sales","dashboard.analysis.visits":"Visits","dashboard.analysis.visits-trend":"Visits Trend","dashboard.analysis.visits-ranking":"Visits Ranking","dashboard.analysis.day-visits":"Daily Visits","dashboard.analysis.week":"WoW Change","dashboard.analysis.day":"DoD Change","dashboard.analysis.payments":"Payments","dashboard.analysis.conversion-rate":"Conversion Rate","dashboard.analysis.operational-effect":"Operational Effect","dashboard.analysis.sales-trend":"Stores Sales Trend","dashboard.analysis.sales-ranking":"Sales Ranking","dashboard.analysis.all-year":"All Year","dashboard.analysis.all-month":"All Month","dashboard.analysis.all-week":"All Week","dashboard.analysis.all-day":"All day","dashboard.analysis.search-users":"Search Users","dashboard.analysis.per-capita-search":"Per Capita Search","dashboard.analysis.online-top-search":"Online Top Search","dashboard.analysis.the-proportion-of-sales":"The Proportion Of Sales","dashboard.analysis.dropdown-option-one":"Operation one","dashboard.analysis.dropdown-option-two":"Operation two","dashboard.analysis.channel.all":"ALL","dashboard.analysis.channel.online":"Online","dashboard.analysis.channel.stores":"Stores","dashboard.analysis.sales":"Sales","dashboard.analysis.traffic":"Traffic","dashboard.analysis.table.rank":"Rank","dashboard.analysis.table.search-keyword":"Keyword","dashboard.analysis.table.users":"Users","dashboard.analysis.table.weekly-range":"Weekly Range","dashboard.indicator.selectSymbol":"Select or enter symbol code","dashboard.indicator.emptyWatchlistHint":"No watchlist, please add first","dashboard.indicator.hint.selectSymbol":"Please select a symbol to start analysis","dashboard.indicator.hint.selectSymbolDesc":"Select or enter stock code in the search box above to view K-line chart and technical indicators","dashboard.indicator.retry":"Retry","dashboard.indicator.panel.title":"Technical Indicators","dashboard.indicator.panel.realtimeOn":"Turn off real-time update","dashboard.indicator.panel.realtimeOff":"Turn on real-time update","dashboard.indicator.panel.themeLight":"Switch to dark theme","dashboard.indicator.panel.themeDark":"Switch to light theme","dashboard.indicator.section.enabled":"Enabled","dashboard.indicator.section.added":"My Added Indicators","dashboard.indicator.section.custom":"My Created Indicators","dashboard.indicator.section.bought":"Purchased Indicators","dashboard.indicator.section.myCreated":"My Created Indicators","dashboard.indicator.section.purchased":"Purchased Indicators","dashboard.indicator.empty":"No indicators, please add or create indicators first","dashboard.indicator.emptyPurchased":"No purchased indicators, check out the market","dashboard.indicator.buy":"Buy Indicators","dashboard.indicator.action.start":"Start","dashboard.indicator.action.stop":"Stop","dashboard.indicator.action.edit":"Edit","dashboard.indicator.action.delete":"Delete","dashboard.indicator.action.backtest":"Backtest","dashboard.indicator.action.publish":"Publish to Community","dashboard.indicator.action.unpublish":"Published (Click to Manage)","dashboard.indicator.status.normal":"Active","dashboard.indicator.status.normalPermanent":"Active (Permanent)","dashboard.indicator.status.expired":"Expired","dashboard.indicator.expiry.permanent":"Permanent","dashboard.indicator.expiry.noExpiry":"No expiration","dashboard.indicator.expiry.expired":"Expired: {date}","dashboard.indicator.expiry.expiresOn":"Expires: {date}","dashboard.indicator.delete.confirmTitle":"Confirm Deletion","dashboard.indicator.delete.confirmContent":'Are you sure you want to delete indicator "{name}"? This action cannot be undone.',"dashboard.indicator.delete.confirmOk":"Delete","dashboard.indicator.delete.confirmCancel":"Cancel","dashboard.indicator.delete.success":"Deleted successfully","dashboard.indicator.delete.failed":"Failed to delete","dashboard.indicator.save.success":"Saved successfully","dashboard.indicator.save.failed":"Failed to save","dashboard.indicator.publish.title":"Publish to Community","dashboard.indicator.publish.editTitle":"Manage Publication","dashboard.indicator.publish.hint":'After publishing, other users can view and purchase your indicator in the "Indicator Community"',"dashboard.indicator.publish.pricingType":"Pricing Type","dashboard.indicator.publish.free":"Free","dashboard.indicator.publish.paid":"Paid","dashboard.indicator.publish.price":"Price","dashboard.indicator.publish.description":"Description","dashboard.indicator.publish.descriptionPlaceholder":"Enter a detailed description to help others understand your indicator...","dashboard.indicator.publish.confirm":"Publish","dashboard.indicator.publish.update":"Update","dashboard.indicator.publish.unpublish":"Unpublish","dashboard.indicator.publish.success":"Published successfully","dashboard.indicator.publish.failed":"Failed to publish","dashboard.indicator.publish.unpublishSuccess":"Unpublished successfully","dashboard.indicator.publish.unpublishFailed":"Failed to unpublish","dashboard.indicator.error.loadWatchlistFailed":"Failed to load watchlist","dashboard.indicator.error.chartNotReady":"Chart component not initialized, please select a symbol and wait for the chart to load","dashboard.indicator.error.chartMethodNotReady":"Chart component method not ready, please try again later","dashboard.indicator.error.chartExecuteNotReady":"Chart component execute method not ready, please try again later","dashboard.indicator.error.parseFailed":"Failed to parse Python code","dashboard.indicator.error.parseFailedCheck":"Failed to parse Python code, please check the code format","dashboard.indicator.error.addIndicatorFailed":"Failed to add indicator","dashboard.indicator.error.runIndicatorFailed":"Failed to run indicator","dashboard.indicator.error.pleaseLogin":"Please login first","dashboard.indicator.error.loadDataFailed":"Failed to load data","dashboard.indicator.error.loadDataFailedDesc":"Please check network connection","dashboard.indicator.error.tiingoSubscription":"Forex 1-minute data requires Tiingo paid subscription. Please use other timeframes or upgrade your subscription.","dashboard.indicator.error.pythonEngineFailed":"Python engine failed to load, indicator functionality may be unavailable","dashboard.indicator.error.chartInitFailed":"Chart initialization failed","dashboard.indicator.warning.enterCode":"Please enter indicator code first","dashboard.indicator.warning.chartNotInitialized":"Chart not initialized, cannot use drawing tools","dashboard.indicator.warning.pyodideLoadFailed":"Python Engine Load Failed","dashboard.indicator.warning.pyodideLoadFailedDesc":"Your current region or network environment cannot use this feature","dashboard.indicator.success.runIndicator":"Indicator ran successfully","dashboard.indicator.success.clearDrawings":"All drawings cleared","dashboard.indicator.sma":"SMA (Moving Average Group)","dashboard.indicator.ema":"EMA (Exponential Moving Average Group)","dashboard.indicator.rsi":"RSI (Relative Strength Index)","dashboard.indicator.macd":"MACD","dashboard.indicator.bb":"Bollinger Bands","dashboard.indicator.atr":"ATR (Average True Range)","dashboard.indicator.cci":"CCI (Commodity Channel Index)","dashboard.indicator.williams":"Williams %R","dashboard.indicator.mfi":"MFI (Money Flow Index)","dashboard.indicator.adx":"ADX (Average Directional Index)","dashboard.indicator.obv":"OBV (On Balance Volume)","dashboard.indicator.adosc":"ADOSC (Accumulation/Distribution Oscillator)","dashboard.indicator.ad":"AD (Accumulation/Distribution Line)","dashboard.indicator.kdj":"KDJ (Stochastic Indicator)","dashboard.indicator.signal.buy":"BUY","dashboard.indicator.signal.sell":"SELL","dashboard.indicator.signal.supertrendBuy":"SuperTrend Buy","dashboard.indicator.signal.supertrendSell":"SuperTrend Sell","dashboard.indicator.chart.kline":"K-Line","dashboard.indicator.chart.volume":"Volume","dashboard.indicator.chart.uptrend":"Up Trend","dashboard.indicator.chart.downtrend":"Down Trend","dashboard.indicator.tooltip.time":"Time","dashboard.indicator.tooltip.open":"O","dashboard.indicator.tooltip.close":"C","dashboard.indicator.tooltip.high":"H","dashboard.indicator.tooltip.low":"L","dashboard.indicator.tooltip.volume":"Volume","dashboard.indicator.drawing.line":"Line","dashboard.indicator.drawing.horizontalLine":"Horizontal Line","dashboard.indicator.drawing.verticalLine":"Vertical Line","dashboard.indicator.drawing.ray":"Ray","dashboard.indicator.drawing.straightLine":"Straight Line","dashboard.indicator.drawing.parallelLine":"Parallel Line","dashboard.indicator.drawing.priceLine":"Price Line","dashboard.indicator.drawing.priceChannel":"Price Channel","dashboard.indicator.drawing.fibonacciLine":"Fibonacci Line","dashboard.indicator.drawing.measure":"Measure","dashboard.indicator.drawing.clearAll":"Clear All Drawings","dashboard.indicator.market.USStock":"US Stock","dashboard.indicator.market.Crypto":"Cryptocurrency","dashboard.indicator.market.Forex":"Forex","dashboard.indicator.market.Futures":"Futures","dashboard.indicator.create":"Create Indicator","dashboard.indicator.editor.title":"Create/Edit Indicator","dashboard.indicator.editor.name":"Indicator Name","dashboard.indicator.editor.nameRequired":"Please enter indicator name","dashboard.indicator.editor.namePlaceholder":"Enter indicator name","dashboard.indicator.editor.description":"Description","dashboard.indicator.editor.descriptionPlaceholder":"Enter description (optional)","dashboard.indicator.editor.code":"Python Code","dashboard.indicator.editor.codeRequired":"Please enter indicator code","dashboard.indicator.editor.codePlaceholder":"Enter Python code","dashboard.indicator.editor.run":"Run","dashboard.indicator.editor.runHint":"Click Run button to preview indicator on K-line chart","dashboard.indicator.editor.guide":"Development Guide","dashboard.indicator.editor.guideTitle":"Python Indicator Development Guide","dashboard.indicator.editor.save":"Save","dashboard.indicator.editor.cancel":"Cancel","dashboard.indicator.editor.unnamed":"Unnamed Indicator","dashboard.indicator.editor.publishToCommunity":"Publish to Community","dashboard.indicator.editor.publishToCommunityHint":"After publishing, other users can view and use your indicator in the community","dashboard.indicator.editor.indicatorType":"Indicator Type","dashboard.indicator.editor.indicatorTypeRequired":"Please select indicator type","dashboard.indicator.editor.indicatorTypePlaceholder":"Please select indicator type","dashboard.indicator.editor.previewImage":"Preview Image","dashboard.indicator.editor.uploadImage":"Upload Image","dashboard.indicator.editor.previewImageHint":"Recommended size: 800x400, max 2MB","dashboard.indicator.editor.pricing":"Pricing (QDT)","dashboard.indicator.editor.pricingType.free":"Free","dashboard.indicator.editor.pricingType.permanent":"Permanent","dashboard.indicator.editor.pricingType.monthly":"Monthly","dashboard.indicator.editor.price":"Price","dashboard.indicator.editor.priceRequired":"Please enter price","dashboard.indicator.editor.pricePlaceholder":"Please enter price","dashboard.indicator.editor.pricingHint":"Free indicators (price 0) will still receive platform rewards based on usage and ratings (QDT)","dashboard.indicator.editor.aiGenerate":"AI Generate","dashboard.indicator.editor.aiPromptPlaceholder":"Describe your signal logic (buy/sell only) and plots. Position sizing, risk, scaling, fees/slippage are configured in backtest.","dashboard.indicator.boundary.message":"Note: The indicator script only computes plots + buy/sell signals. Position sizing, risk, scaling, fees/slippage belong to execution config.","dashboard.indicator.boundary.indicatorRule":"Keep the script to buy/sell only (and set df['buy']/df['sell']). Do NOT implement position management, TP/SL, scaling in the script.","dashboard.indicator.boundary.backtestRule":"Rule: If a bar has a main signal (buy/sell → open/close/reverse), scaling in/out is skipped on the same bar.","dashboard.indicator.editor.aiGenerateBtn":"AI Generate Code","dashboard.indicator.editor.aiPromptRequired":"Please enter your idea","dashboard.indicator.editor.aiGenerateSuccess":"Code generated successfully","dashboard.indicator.editor.aiGenerateError":"Code generation failed, please try again later","dashboard.indicator.editor.verifyCode":"Verify Code","dashboard.indicator.editor.verifyCodeSuccess":"Verification Passed","dashboard.indicator.editor.verifyCodeFailed":"Verification Failed","dashboard.indicator.editor.verifyCodeEmpty":"Code cannot be empty","dashboard.indicator.guide.title":"Python Indicator & Strategy Development Guide","dashboard.indicator.guide.intro":"This platform supports writing custom technical indicators and trading signals using Python. The system includes built-in pandas and numpy data analysis libraries. You can use standard DataFrame operations to process K-line data and draw charts or mark buy/sell signals.","dashboard.indicator.guide.section1.title":"1. Runtime Environment & Predefined Variables","dashboard.indicator.guide.section1.env":"Your code runs in a browser-based Python environment (Pyodide).","dashboard.indicator.guide.section1.libs":"Pre-installed Libraries","dashboard.indicator.guide.section1.libsDesc":"The following libraries are imported by default, no need to import again:","dashboard.indicator.guide.section1.libsList":"pandas (pd), numpy (np), math, json","dashboard.indicator.guide.section1.data":"Input Data: df","dashboard.indicator.guide.section1.dataDesc":"The system automatically converts current K-line data into a Pandas DataFrame object, variable name is df.","dashboard.indicator.guide.section1.dataColumns":"df contains the following columns (all float type):","dashboard.indicator.guide.section1.dataColumnsList":"time (timestamp, seconds), open, high, low, close, volume","dashboard.indicator.guide.section1.dataNote":"Data index is arranged from old to new (0 is the earliest data, last row is the latest data).","dashboard.indicator.guide.section1.dataIndex":"Important: df index is timestamp (DatetimeIndex), please preserve the index, avoid using .values which loses the index.","dashboard.indicator.guide.section2.title":"2. Parameter Definition","dashboard.indicator.guide.section2.desc":"You can define variables as parameters at the beginning of your code. The system will try to parse statements like variable = value as adjustable parameters.","dashboard.indicator.guide.section2.example":"Parameter Example","dashboard.indicator.guide.section2.exampleCode":"span = 20 or multiplier = 2.0","dashboard.indicator.guide.section3.title":"3. Backtest Signal Setup (Important!)","dashboard.indicator.guide.section3.desc":"If you want your indicator to support backtesting, you must set the following two columns in your code:","dashboard.indicator.guide.section3.backtestRequired":"Required for Backtesting:","dashboard.indicator.guide.section3.backtestBuySignal":"df['buy_signal'] - Boolean Series, True indicates buy signal","dashboard.indicator.guide.section3.backtestSellSignal":"df['sell_signal'] - Boolean Series, True indicates sell signal","dashboard.indicator.guide.section3.backtestExample":"Example:","dashboard.indicator.guide.section3.backtestExampleCode":"df['buy_signal'] = condition_buy
df['sell_signal'] = condition_sell","dashboard.indicator.guide.section3.backtestNote":"Note: Even if you only set output.signals for chart display, you must set these two columns to enable backtesting.","dashboard.indicator.guide.section4.title":"4. Output Requirements: output","dashboard.indicator.guide.section4.desc":"At the end of code execution, you must define a dictionary named output to tell the chart how to display results.","dashboard.indicator.guide.section4.fields":"The output dictionary contains the following fields:","dashboard.indicator.guide.section4.plots":"plots - For drawing lines (e.g., moving averages, RSI)","dashboard.indicator.guide.section4.signals":"signals - For marking buy/sell signals (e.g., arrows, labels)","dashboard.indicator.guide.section4.name":"name - Indicator name (optional)","dashboard.indicator.guide.section4.calculatedVars":"calculatedVars - Calculated variables (optional, for displaying additional information)","dashboard.indicator.guide.section5.title":"5. Plot Configuration (Plots)","dashboard.indicator.guide.section5.desc":"Each object in the plots list represents a line.","dashboard.indicator.guide.section5.table.field":"Field","dashboard.indicator.guide.section5.table.type":"Type","dashboard.indicator.guide.section5.table.required":"Required","dashboard.indicator.guide.section5.table.requiredYes":"Yes","dashboard.indicator.guide.section5.table.requiredNo":"No","dashboard.indicator.guide.section5.table.desc":"Description","dashboard.indicator.guide.section5.table.name":"The name of the indicator line, displayed in the legend","dashboard.indicator.guide.section5.table.data":"Data list, length must match the number of rows in df. Recommended to use series.tolist()","dashboard.indicator.guide.section5.table.color":"Line color (Hex format, e.g. '#ff0000'). If not filled, the system will automatically assign","dashboard.indicator.guide.section5.table.typeDesc":"Chart type, default is 'line'","dashboard.indicator.guide.section5.table.overlay":"Important. True means display on main chart (with K-line), False means display on sub-chart (independent area)","dashboard.indicator.guide.section5.example":"Example: Draw Simple Moving Average (SMA)","dashboard.indicator.guide.section5.exampleCalc":"Calculate SMA","dashboard.indicator.guide.section5.exampleOutput":"Construct Output","dashboard.indicator.guide.section5.exampleOverlay":"Display on main chart","dashboard.indicator.guide.section6.title":"6. Signal Markers (Signals)","dashboard.indicator.guide.section6.desc":"signals are used to mark buy/sell points on specific K-lines through icons or text. Note: This is only for chart display. The backtest system uses df['buy_signal'] and df['sell_signal'].","dashboard.indicator.guide.section6.table.type":"Signal type: 'buy' (buy, marked below K-line) or 'sell' (sell, marked above K-line)","dashboard.indicator.guide.section6.table.data":"Signal data list. Fill price value at signal positions, fill None (or np.nan) at non-signal positions","dashboard.indicator.guide.section6.table.text":'Text displayed on the label (e.g. "B", "S", "Buy", "Sell")',"dashboard.indicator.guide.section6.table.color":"Marker color","dashboard.indicator.guide.section6.hint":"The system automatically handles positioning.","dashboard.indicator.guide.section6.buy":"Markers will be automatically positioned below the Low of the current K-line","dashboard.indicator.guide.section6.sell":"Markers will be automatically positioned above the High of the current K-line","dashboard.indicator.guide.section6.example":"Example: Draw Buy/Sell Signals","dashboard.indicator.guide.section6.exampleInit":"Initialize signal list, fill all with None","dashboard.indicator.guide.section6.exampleLogic":"Simple logic: mark buy when close price is greater than open price","dashboard.indicator.guide.section6.exampleNote":"In actual logic, please use loops or vectorized operations","dashboard.indicator.guide.section6.examplePrice":"Record price","dashboard.indicator.guide.section6.exampleText":"Buy","dashboard.indicator.guide.section7.title":"7. Complete Code Examples","dashboard.indicator.guide.section7.exampleA":"Example A: Dual EMA Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleACode":'# 1. Calculate indicators
df[\'ema_fast\'] = df[\'close\'].ewm(span=5, adjust=False).mean()
df[\'ema_slow\'] = df[\'close\'].ewm(span=13, adjust=False).mean()

# 2. Calculate crossover signals
cross_up = (df[\'ema_fast\'] > df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) <= df[\'ema_slow\'].shift(1))
cross_down = (df[\'ema_fast\'] < df[\'ema_slow\']) & (df[\'ema_fast\'].shift(1) >= df[\'ema_slow\'].shift(1))

# 3. 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = cross_up
df[\'close_long\'] = cross_down
df[\'open_short\'] = cross_down
df[\'close_short\'] = cross_up

# 4. Generate signal data for chart display
buy_signals = [df[\'low\'].iloc[i] * 0.995 if cross_up.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if cross_down.iloc[i] else None for i in range(len(df))]

# 5. Build output
output = {
"name": "Dual EMA Strategy",
"plots": [
{"name": "EMA 5", "data": df[\'ema_fast\'].tolist(), "color": "#FF6B6B", "overlay": True},
{"name": "EMA 13", "data": df[\'ema_slow\'].tolist(), "color": "#4ECDC4", "overlay": True}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section7.exampleB":"Example B: Bollinger Bands - Chart Display Only","dashboard.indicator.guide.section7.exampleBCode":'# Calculate Bollinger Bands (chart display only, no backtesting)
length = 20
mult = 2.0
df[\'sma\'] = df[\'close\'].rolling(length).mean()
df[\'std\'] = df[\'close\'].rolling(length).std()
df[\'upper\'] = df[\'sma\'] + mult * df[\'std\']
df[\'lower\'] = df[\'sma\'] - mult * df[\'std\']

output = {
"name": "Bollinger Bands",
"plots": [
{"name": "Upper", "data": df[\'upper\'].tolist(), "color": "#FF5252", "overlay": True},
{"name": "Middle", "data": df[\'sma\'].tolist(), "color": "#2196F3", "overlay": True},
{"name": "Lower", "data": df[\'lower\'].tolist(), "color": "#00E676", "overlay": True}
]
}',"dashboard.indicator.guide.section7.exampleC":"Example C: RSI Strategy (Supports Backtesting)","dashboard.indicator.guide.section7.exampleCCode":'# Calculate RSI
delta = df[\'close\'].diff()
up = delta.clip(lower=0)
down = -1 * delta.clip(upper=0)
ema_up = up.ewm(com=13, adjust=False).mean()
ema_down = down.ewm(com=13, adjust=False).mean()
rs = ema_up / ema_down
df[\'rsi\'] = 100 - (100 / (1 + rs))

# Generate trading signals
buy_condition = df[\'rsi\'] < 30 # Oversold buy
sell_condition = df[\'rsi\'] > 70 # Overbought sell

# 【Important】Set NEW backtest signal columns (bool)
df[\'open_long\'] = buy_condition
df[\'close_long\'] = sell_condition
df[\'open_short\'] = sell_condition
df[\'close_short\'] = buy_condition

# Generate chart signals
buy_signals = [df[\'low\'].iloc[i] * 0.995 if buy_condition.iloc[i] else None for i in range(len(df))]
sell_signals = [df[\'high\'].iloc[i] * 1.005 if sell_condition.iloc[i] else None for i in range(len(df))]

output = {
"name": "RSI Strategy",
"plots": [
{"name": "RSI", "data": df[\'rsi\'].tolist(), "color": "#9C27B0", "overlay": False},
{"name": "Overbought", "data": [70] * len(df), "color": "#FF5252", "style": "dashed", "overlay": False},
{"name": "Oversold", "data": [30] * len(df), "color": "#00E676", "style": "dashed", "overlay": False}
],
"signals": [
{"type": "buy", "text": "BUY", "data": buy_signals, "color": "#00E676"},
{"type": "sell", "text": "SELL", "data": sell_signals, "color": "#FF5252"}
]
}',"dashboard.indicator.guide.section6.param":"Parameters","dashboard.indicator.guide.section6.calc":"Calculate","dashboard.indicator.guide.section6.output":"Output","dashboard.indicator.guide.section6.generate":"Generate signal data (initialize with None)","dashboard.indicator.guide.section6.subchart":"Display on sub-chart","dashboard.indicator.guide.section8.title":"8. Frequently Asked Questions (FAQ)","dashboard.indicator.guide.section8.q1":"Q: Why can't my indicator be backtested?","dashboard.indicator.guide.section8.a1":"A: The backtest system requires NEW signal columns: df['open_long'], df['close_long'], df['open_short'], df['close_short'] (boolean). Even if you set output.signals for chart display, you must set these columns to enable backtesting.","dashboard.indicator.guide.section8.q2":"Q: Data length mismatch?","dashboard.indicator.guide.section8.a2":"A: The data list in plots and signals must have exactly the same length as the K-line data. If you use df['xxx'].tolist(), there is usually no problem.","dashboard.indicator.guide.section8.q3":"Q: How to handle NaN (empty values)?","dashboard.indicator.guide.section8.a3":"A: Pandas calculations (such as rolling mean) will produce NaN at the beginning. The system will automatically convert NaN to null for chart rendering. You don't need to manually clean it, but if you need specific logic, you can use df.fillna(0) or other methods.","dashboard.indicator.guide.section8.q4":"Q: Index mismatch causing all signals to be NaN?","dashboard.indicator.guide.section8.a4":"A: Please ensure you preserve the original df index (timestamp). Avoid using .values to create new Series. Use columns directly like df['close'] for operations.","dashboard.indicator.guide.section8.q5":"Q: Can I use third-party network libraries?","dashboard.indicator.guide.section8.a5":"A: No. The runtime environment is a browser sandbox and cannot use libraries like requests to request external APIs, nor can it install additional pip packages. Limited to built-in libraries such as pandas, numpy, math, json.","dashboard.indicator.guide.section8.q6":"Q: How to debug code?","dashboard.indicator.guide.section8.a6":"A: If the chart does not display indicators, it is usually because the Python code has an error. Please check for syntax errors or array index out of bounds. It is recommended to debug the algorithm logic in a local Python environment first, then copy it in.","dashboard.indicator.guide.section8.q7":"Q: Backtest shows 0 signals?","dashboard.indicator.guide.section8.a7":"A: Please check the data type of df['open_long']/df['close_long']/df['open_short']/df['close_short']. They should be boolean (True/False), not numeric. Use condition.fillna(False).astype(bool) to ensure correct type.","dashboard.indicator.paramsConfig.title":"Indicator Parameters","dashboard.indicator.paramsConfig.noParams":"No configurable parameters for this indicator","dashboard.indicator.paramsConfig.hint":"Configure parameters and click OK to run the indicator","dashboard.indicator.backtest.title":"Indicator Backtest","dashboard.indicator.backtest.config":"Backtest Parameters","dashboard.indicator.backtest.startDate":"Start Date","dashboard.indicator.backtest.endDate":"End Date","dashboard.indicator.backtest.selectStartDate":"Select start date","dashboard.indicator.backtest.selectEndDate":"Select end date","dashboard.indicator.backtest.startDateRequired":"Please select start date","dashboard.indicator.backtest.endDateRequired":"Please select end date","dashboard.indicator.backtest.initialCapital":"Initial Capital","dashboard.indicator.backtest.initialCapitalRequired":"Please enter initial capital","dashboard.indicator.backtest.commission":"Commission Rate (%)","dashboard.indicator.backtest.commissionHint":"Charged on notional value (incl. leverage) per trade; both entry & exit are deducted from balance.","dashboard.indicator.backtest.leverage":"Leverage","dashboard.indicator.backtest.timeframe":"Timeframe","dashboard.indicator.backtest.tradeDirection":"Trade Direction","dashboard.indicator.backtest.longOnly":"Long Only","dashboard.indicator.backtest.shortOnly":"Short Only","dashboard.indicator.backtest.both":"Both","dashboard.indicator.backtest.run":"Run Backtest","dashboard.indicator.backtest.rerun":"Run Again","dashboard.indicator.backtest.close":"Close","dashboard.indicator.backtest.running":"Running indicator backtest...","dashboard.indicator.backtest.loadingTip1":"Fetching historical K-line data...","dashboard.indicator.backtest.loadingTip2":"Executing strategy signal calculation...","dashboard.indicator.backtest.loadingTip3":"Simulating trade execution...","dashboard.indicator.backtest.loadingTip4":"Calculating backtest metrics...","dashboard.indicator.backtest.loadingTip5":"Almost done, please wait...","dashboard.indicator.backtest.results":"Backtest Results","dashboard.indicator.backtest.totalReturn":"Total Return","dashboard.indicator.backtest.annualReturn":"Annual Return","dashboard.indicator.backtest.maxDrawdown":"Max Drawdown","dashboard.indicator.backtest.sharpeRatio":"Sharpe Ratio","dashboard.indicator.backtest.winRate":"Win Rate","dashboard.indicator.backtest.profitFactor":"Profit Factor","dashboard.indicator.backtest.totalTrades":"Total Trades","dashboard.indicator.totalReturn":"Total Return","dashboard.indicator.annualReturn":"Annual Return","dashboard.indicator.maxDrawdown":"Max Drawdown","dashboard.indicator.sharpeRatio":"Sharpe Ratio","dashboard.indicator.winRate":"Win Rate","dashboard.indicator.profitFactor":"Profit Factor","dashboard.indicator.totalTrades":"Total Trades","dashboard.indicator.backtest.totalCommission":"Total Commission","dashboard.indicator.backtest.equityCurve":"Equity Curve","dashboard.indicator.backtest.strategy":"Indicator","dashboard.indicator.backtest.benchmark":"Benchmark","dashboard.indicator.backtest.tradeHistory":"Trade History","dashboard.indicator.backtest.tradeTime":"Time","dashboard.indicator.backtest.tradeType":"Type","dashboard.indicator.backtest.buy":"Buy","dashboard.indicator.backtest.sell":"Sell","dashboard.indicator.backtest.liquidation":"Liquidation","dashboard.indicator.backtest.openLong":"Open Long","dashboard.indicator.backtest.closeLong":"Close Long","dashboard.indicator.backtest.closeLongStop":"Close Long (Stop Loss)","dashboard.indicator.backtest.closeLongProfit":"Close Long (Take Profit)","dashboard.indicator.backtest.addLong":"Add Long","dashboard.indicator.backtest.openShort":"Open Short","dashboard.indicator.backtest.closeShort":"Close Short","dashboard.indicator.backtest.closeShortStop":"Close Short (Stop Loss)","dashboard.indicator.backtest.closeShortProfit":"Close Short (Take Profit)","dashboard.indicator.backtest.addShort":"Add Short","dashboard.indicator.backtest.closeLongTrailing":"Close Long (Trailing)","dashboard.indicator.backtest.reduceLong":"Reduce Long","dashboard.indicator.backtest.closeShortTrailing":"Close Short (Trailing)","dashboard.indicator.backtest.reduceShort":"Reduce Short","dashboard.indicator.backtest.price":"Price","dashboard.indicator.backtest.amount":"Amount","dashboard.indicator.backtest.balance":"Balance","dashboard.indicator.backtest.profit":"P&L","dashboard.indicator.backtest.success":"Backtest completed","dashboard.indicator.backtest.failed":"Backtest failed, please try again later","dashboard.indicator.backtest.quickSelect":"Quick Select","dashboard.indicator.backtest.precisionMode":"Backtest Precision Mode","dashboard.indicator.backtest.estimatedCandles":"Est. {count} candles to process","dashboard.indicator.backtest.highPrecisionDesc":"Using 1-minute candles for high-precision backtest, stop-loss/take-profit triggers are more accurate","dashboard.indicator.backtest.mediumPrecisionDesc":"Range exceeds 30 days, using 5-minute candles to balance precision and performance","dashboard.indicator.backtest.standardModeWarning":"Using Standard Backtest Mode","dashboard.indicator.backtest.standardModeDesc":"Current config does not support high-precision backtest, using strategy timeframe","dashboard.indicator.backtest.onlyCryptoSupported":"High-precision backtest only supports cryptocurrency market","dashboard.indicator.backtest.noIndicatorCode":"This indicator has no backtestable code","dashboard.indicator.backtest.noSymbol":"Please select a trading symbol first","dashboard.indicator.backtest.dateRangeExceeded":"Backtest date range exceeded: {timeframe} timeframe allows max {maxRange}","dashboard.indicator.backtest.dateRangeExceededDays":"Backtest range exceeds limit: {timeframe} max {maxRange} ({maxDays} days)","dashboard.indicator.backtest.metaLine":"Symbol: {symbol} | Market: {market} | Timeframe: {timeframe}","dashboard.indicator.backtest.savedRunId":"Backtest saved. Run ID: {id}","dashboard.indicator.backtest.historyTitle":"Backtest History","dashboard.indicator.backtest.historyRefresh":"Refresh","dashboard.indicator.backtest.historyView":"View","dashboard.indicator.backtest.historyNoData":"No backtest history","dashboard.indicator.backtest.historyUseCurrent":"Only current symbol/timeframe","dashboard.indicator.backtest.historyFilterSymbol":"Symbol","dashboard.indicator.backtest.historyFilterTimeframe":"Timeframe","dashboard.indicator.backtest.historyApply":"Apply filters","dashboard.indicator.backtest.historyAIAnalyze":"AI Analyze","dashboard.indicator.backtest.historyAIAnalyzeTitle":"AI Suggestions","dashboard.indicator.backtest.historyNoAIResult":"No AI analysis result","dashboard.indicator.backtest.historyRunId":"Run ID","dashboard.indicator.backtest.historyCreatedAt":"Time","dashboard.indicator.backtest.historyRange":"Range","dashboard.indicator.backtest.historyStatus":"Status","dashboard.indicator.backtest.historyStatusSuccess":"Success","dashboard.indicator.backtest.historyStatusFailed":"Failed","dashboard.indicator.backtest.historyActions":"Actions","dashboard.indicator.backtest.prev":"Previous","dashboard.indicator.backtest.next":"Next","dashboard.indicator.backtest.steps.strategy.title":"Execution Config","dashboard.indicator.backtest.steps.strategy.desc":"Position, risk, scaling","dashboard.indicator.backtest.steps.trading.title":"Backtest Setup","dashboard.indicator.backtest.steps.trading.desc":"Time, capital, fees, leverage, slippage","dashboard.indicator.backtest.steps.results.title":"Results","dashboard.indicator.backtest.steps.results.desc":"Summary & trades","dashboard.indicator.backtest.panel.risk":"Execution: Risk (SL / trailing)","dashboard.indicator.backtest.panel.scale":"Execution: Scale-in (Trend / DCA)","dashboard.indicator.backtest.panel.reduce":"Execution: Scale-out (Trend / Adverse)","dashboard.indicator.backtest.panel.position":"Execution: Entry sizing","dashboard.indicator.backtest.field.stopLossPct":"Stop Loss (%)","dashboard.indicator.backtest.field.takeProfitPct":"Take Profit (%)","dashboard.indicator.backtest.field.trailingEnabled":"Trailing stop / take profit","dashboard.indicator.backtest.field.trailingStopPct":"Trailing drawdown (%)","dashboard.indicator.backtest.field.trailingActivationPct":"Trailing activation (%)","dashboard.indicator.backtest.field.slippage":"Slippage (%)","dashboard.indicator.backtest.field.trendAddEnabled":"Trend-following scale-in","dashboard.indicator.backtest.field.dcaAddEnabled":"Mean-reversion DCA","dashboard.indicator.backtest.field.trendAddStepPct":"Scale-in trigger (%)","dashboard.indicator.backtest.field.dcaAddStepPct":"DCA trigger (%)","dashboard.indicator.backtest.field.trendAddSizePct":"Scale-in size (% of capital)","dashboard.indicator.backtest.field.dcaAddSizePct":"DCA size (% of capital)","dashboard.indicator.backtest.field.trendAddMaxTimes":"Max scale-in times","dashboard.indicator.backtest.field.dcaAddMaxTimes":"Max DCA times","dashboard.indicator.backtest.field.trendReduceEnabled":"Trend reduce","dashboard.indicator.backtest.field.adverseReduceEnabled":"Adverse reduce","dashboard.indicator.backtest.field.trendReduceStepPct":"Trend trigger (%)","dashboard.indicator.backtest.field.adverseReduceStepPct":"Adverse trigger (%)","dashboard.indicator.backtest.field.trendReduceSizePct":"Reduce size (% of position)","dashboard.indicator.backtest.field.adverseReduceSizePct":"Adverse reduce size (% of position)","dashboard.indicator.backtest.field.trendReduceMaxTimes":"Max trend reduce times","dashboard.indicator.backtest.field.adverseReduceMaxTimes":"Max adverse reduce times","dashboard.indicator.backtest.field.entryPct":"Entry size (% of capital)","dashboard.indicator.backtest.field.minOrderPct":"Min order size (% of capital) (optional)","dashboard.indicator.backtest.hint.entryPctMax":"Max entry: {maxPct}% (reserve budget for future scale-ins)","dashboard.docs.title":"Documentation","dashboard.docs.search.placeholder":"Search documents...","dashboard.docs.category.all":"All","dashboard.docs.category.guide":"Guides","dashboard.docs.category.api":"API Reference","dashboard.docs.category.tutorial":"Tutorials","dashboard.docs.category.faq":"FAQ","dashboard.docs.featured.title":"Featured Documents","dashboard.docs.featured.tag":"Featured","dashboard.docs.list.views":"views","dashboard.docs.list.author":"Author","dashboard.docs.list.empty":"No documents","dashboard.docs.list.backToAll":"Back to All Documents","dashboard.docs.list.total":"Total {count} documents","dashboard.docs.detail.back":"Back to List","dashboard.docs.detail.updatedAt":"Updated at","dashboard.docs.detail.related":"Related Documents","dashboard.docs.detail.notFound":"Document Not Found","dashboard.docs.detail.error":"Document does not exist or has been deleted","dashboard.docs.search.result":"Search Results","dashboard.docs.search.keyword":"Keyword","dashboard.totalEquity":"Total Equity","dashboard.totalPnL":"Total P&L","dashboard.aiStrategies":"AI Strategies","dashboard.indicatorStrategies":"Indicator Strategies","dashboard.running":"Running","dashboard.enabled":"Enabled","dashboard.pnlHistory":"P&L History","dashboard.strategyPerformance":"Strategy Performance","dashboard.strategyRanking":"Strategy Ranking","dashboard.winRate":"Win Rate","dashboard.profitFactor":"Profit Factor","dashboard.maxDrawdown":"Max Drawdown","dashboard.totalTrades":"Total Trades","dashboard.runningStrategies":"Running Strategies","dashboard.equityCurve":"Equity Curve","dashboard.strategyAllocation":"Strategy Allocation","dashboard.drawdownCurve":"Drawdown Curve","dashboard.drawdown":"Drawdown","dashboard.hourlyDistribution":"Hourly Distribution","dashboard.dailyPnl":"Daily P&L","dashboard.cumulativePnl":"Cumulative P&L","dashboard.tradeCount":"Trade Count","dashboard.profit":"Profit","dashboard.noData":"No Data","dashboard.noStrategyData":"No strategy data","dashboard.ranking.totalProfit":"Total Profit","dashboard.ranking.roi":"ROI","dashboard.ranking.trades":"Trades","dashboard.unit.trades":"","dashboard.unit.strategies":"","dashboard.label.avgDaily":"Avg Daily","dashboard.label.avgProfit":"Avg Profit","dashboard.label.win":"W","dashboard.label.lose":"L","dashboard.label.trade":"Trades","dashboard.label.indicator":"Indicator","dashboard.label.totalPnl":"Total P&L","dashboard.label.maxDrawdownPoint":"Max DD","dashboard.profitCalendar":"Profit Calendar","dashboard.recentTrades":"Recent Trades","dashboard.currentPositions":"Current Positions","dashboard.table.time":"Time","dashboard.table.strategy":"Strategy","dashboard.table.symbol":"Symbol","dashboard.table.type":"Type","dashboard.table.side":"Side","dashboard.table.size":"Size","dashboard.table.entryPrice":"Entry Price","dashboard.table.price":"Price","dashboard.table.amount":"Amount","dashboard.table.profit":"Profit","dashboard.pendingOrders":"Order Execution Records","dashboard.totalOrders":"Total {total} orders","dashboard.viewError":"View Error","dashboard.filled":"Filled","dashboard.orderTable.time":"Created Time","dashboard.orderTable.strategy":"Strategy","dashboard.orderTable.symbol":"Symbol","dashboard.orderTable.signalType":"Signal Type","dashboard.orderTable.amount":"Amount","dashboard.orderTable.price":"Filled Price","dashboard.orderTable.status":"Status","dashboard.orderTable.timeInfo":"Time","dashboard.orderTable.executedAt":"Executed Time","dashboard.orderTable.exchange":"Exchange","dashboard.orderTable.notify":"Notify","dashboard.orderTable.actions":"Actions","dashboard.orderTable.delete":"Delete","dashboard.orderTable.deleteConfirm":"Delete this record?","dashboard.orderTable.deleteSuccess":"Deleted","dashboard.orderTable.deleteFailed":"Delete failed","dashboard.newOrderNotify":"New Order Alert","dashboard.newOrderDesc":"New order execution record","dashboard.soundEnabled":"Sound notification enabled","dashboard.soundDisabled":"Sound notification disabled","dashboard.clickToMute":"Click to mute","dashboard.clickToUnmute":"Click to unmute","dashboard.signalType.openLong":"Open Long","dashboard.signalType.openShort":"Open Short","dashboard.signalType.closeLong":"Close Long","dashboard.signalType.closeShort":"Close Short","dashboard.signalType.addLong":"Add Long","dashboard.signalType.addShort":"Add Short","dashboard.status.pending":"Pending","dashboard.status.processing":"Processing","dashboard.status.completed":"Completed","dashboard.status.failed":"Failed","dashboard.status.cancelled":"Cancelled","dashboard.table.pnl":"Unrealized P&L","form.basic-form.basic.title":"Basic form","form.basic-form.basic.description":"Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.","form.basic-form.title.label":"Title","form.basic-form.title.placeholder":"Give the target a name","form.basic-form.title.required":"Please enter a title","form.basic-form.date.label":"Start and end date","form.basic-form.placeholder.start":"Start date","form.basic-form.placeholder.end":"End date","form.basic-form.date.required":"Please select the start and end date","form.basic-form.goal.label":"Goal description","form.basic-form.goal.placeholder":"Please enter your work goals","form.basic-form.goal.required":"Please enter a description of the goal","form.basic-form.standard.label":"Metrics","form.basic-form.standard.placeholder":"Please enter a metric","form.basic-form.standard.required":"Please enter a metric","form.basic-form.client.label":"Client","form.basic-form.label.tooltip":"Target service object","form.basic-form.client.placeholder":"Please describe your customer service, internal customers directly @ Name / job number","form.basic-form.client.required":"Please describe the customers you serve","form.basic-form.invites.label":"Inviting critics","form.basic-form.invites.placeholder":"Please direct @ Name / job number, you can invite up to 5 people","form.basic-form.weight.label":"Weight","form.basic-form.weight.placeholder":"Please enter weight","form.basic-form.public.label":"Target disclosure","form.basic-form.label.help":"Customers and invitees are shared by default","form.basic-form.radio.public":"Public","form.basic-form.radio.partially-public":"Partially public","form.basic-form.radio.private":"Private","form.basic-form.publicUsers.placeholder":"Open to","form.basic-form.option.A":"Colleague A","form.basic-form.option.B":"Colleague B","form.basic-form.option.C":"Colleague C","form.basic-form.email.required":"Please enter your email!","form.basic-form.email.wrong-format":"The email address is in the wrong format!","form.basic-form.userName.required":"Please enter your userName!","form.basic-form.password.required":"Please enter your password!","form.basic-form.password.twice":"The passwords entered twice do not match!","form.basic-form.strength.msg":"Please enter at least 6 characters and don't use passwords that are easy to guess.","form.basic-form.strength.strong":"Strength: strong","form.basic-form.strength.medium":"Strength: medium","form.basic-form.strength.short":"Strength: too short","form.basic-form.confirm-password.required":"Please confirm your password!","form.basic-form.phone-number.required":"Please enter your phone number!","form.basic-form.phone-number.wrong-format":"Malformed phone number!","form.basic-form.verification-code.required":"Please enter the verification code!","form.basic-form.form.get-captcha":"Get Captcha","form.basic-form.captcha.second":"sec","form.basic-form.form.optional":" (optional) ","form.basic-form.form.submit":"Submit","form.basic-form.form.save":"Save","form.basic-form.email.placeholder":"Email","form.basic-form.password.placeholder":"Password","form.basic-form.confirm-password.placeholder":"Confirm password","form.basic-form.phone-number.placeholder":"Phone number","form.basic-form.verification-code.placeholder":"Verification code","result.success.title":"Submission Success","result.success.description":"The submission results page is used to feed back the results of a series of operational tasks. If it is a simple operation, use the Message global prompt feedback. This text area can show a simple supplementary explanation. If there is a similar requirement for displaying “documents”, the following gray area can present more complicated content.","result.success.operate-title":"Project Name","result.success.operate-id":"Project ID","result.success.principal":"Principal","result.success.operate-time":"Effective time","result.success.step1-title":"Create project","result.success.step1-operator":"Qu Lili","result.success.step2-title":"Departmental preliminary review","result.success.step2-operator":"Zhou Maomao","result.success.step2-extra":"Urge","result.success.step3-title":"Financial review","result.success.step4-title":"Finish","result.success.btn-return":"Back List","result.success.btn-project":"View Project","result.success.btn-print":"Print","result.fail.error.title":"Submission Failed","result.fail.error.description":"Please check and modify the following information before resubmitting.","result.fail.error.hint-title":"The content you submitted has the following error:","result.fail.error.hint-text1":"Your account has been frozen","result.fail.error.hint-btn1":"Thaw immediately","result.fail.error.hint-text2":"Your account is not yet eligible to apply","result.fail.error.hint-btn2":"Upgrade immediately","result.fail.error.btn-text":"Return to modify","account.settings.menuMap.custom":"Custom Settings","account.settings.menuMap.binding":"Account Binding","account.settings.basic.avatar":"Avatar","account.settings.basic.change-avatar":"Change avatar","account.settings.basic.email":"Email","account.settings.basic.email-message":"Please input your email!","account.settings.basic.nickname":"Nickname","account.settings.basic.nickname-message":"Please input your Nickname!","account.settings.basic.profile":"Personal profile","account.settings.basic.profile-message":"Please input your personal profile!","account.settings.basic.profile-placeholder":"Brief introduction to yourself","account.settings.basic.country":"Country/Region","account.settings.basic.country-message":"Please input your country!","account.settings.basic.geographic":"Province or city","account.settings.basic.geographic-message":"Please input your geographic info!","account.settings.basic.address":"Street Address","account.settings.basic.address-message":"Please input your address!","account.settings.basic.phone":"Phone Number","account.settings.basic.phone-message":"Please input your phone!","account.settings.basic.update":"Update Information","account.settings.basic.update.success":"Update basic information successfully","account.settings.security.strong":"Strong","account.settings.security.medium":"Medium","account.settings.security.weak":"Weak","account.settings.security.password":"Account Password","account.settings.security.password-description":"Current password strength:","account.settings.security.phone":"Security Phone","account.settings.security.phone-description":"Bound phone:","account.settings.security.question":"Security Question","account.settings.security.question-description":"The security question is not set, and the security policy can effectively protect the account security","account.settings.security.email":"Bound Email","account.settings.security.email-description":"Bound Email:","account.settings.security.mfa":"MFA Device","account.settings.security.mfa-description":"Unbound MFA device, after binding, can be confirmed twice","account.settings.security.modify":"Modify","account.settings.security.set":"Set","account.settings.security.bind":"Bind","account.settings.binding.taobao":"Binding Taobao","account.settings.binding.taobao-description":"Currently unbound Taobao account","account.settings.binding.alipay":"Binding Alipay","account.settings.binding.alipay-description":"Currently unbound Alipay account","account.settings.binding.dingding":"Binding DingTalk","account.settings.binding.dingding-description":"Currently unbound DingTalk account","account.settings.binding.bind":"Bind","account.settings.notification.password":"Account Password","account.settings.notification.password-description":"Messages from other users will be notified in the form of a station letter","account.settings.notification.messages":"System Messages","account.settings.notification.messages-description":"System messages will be notified in the form of a station letter","account.settings.notification.todo":"To-do Notification","account.settings.notification.todo-description":"The to-do list will be notified in the form of a letter from the station","account.settings.settings.open":"Open","account.settings.settings.close":"Close","trading-assistant.title":"Trading Assistant","trading-assistant.strategyList":"Strategy List","trading-assistant.createStrategy":"Create Strategy","trading-assistant.noStrategy":"No strategies","trading-assistant.selectStrategy":"Please select a strategy from the left to view details","trading-assistant.startStrategy":"Start Strategy","trading-assistant.stopStrategy":"Stop Strategy","trading-assistant.editStrategy":"Edit Strategy","trading-assistant.deleteStrategy":"Delete Strategy","trading-assistant.startAll":"Start All","trading-assistant.stopAll":"Stop All","trading-assistant.deleteAll":"Delete All","trading-assistant.symbolCount":"symbols","trading-assistant.strategyCount":"strategies","trading-assistant.groupBy":"Group By","trading-assistant.groupByStrategy":"Strategy","trading-assistant.groupBySymbol":"Symbol","trading-assistant.timeframe":"Timeframe","trading-assistant.indicator":"Indicator","trading-assistant.status.running":"Running","trading-assistant.status.stopped":"Stopped","trading-assistant.status.error":"Error","trading-assistant.strategyType.IndicatorStrategy":"Indicator Strategy","trading-assistant.strategyType.PromptBasedStrategy":"Prompt Strategy","trading-assistant.strategyType.GridStrategy":"Grid Strategy","trading-assistant.tabs.tradingRecords":"Trading Records","trading-assistant.tabs.positions":"Positions","trading-assistant.tabs.equityCurve":"Equity Curve","trading-assistant.form.step1":"Select Indicator","trading-assistant.form.step2":"Exchange Configuration","trading-assistant.form.step3":"Strategy Parameters","trading-assistant.form.step2Params":"Parameters","trading-assistant.form.step3Signal":"Signal Delivery","trading-assistant.form.simpleMode":"Simple","trading-assistant.form.advancedMode":"Advanced","trading-assistant.form.simpleModeHint":"Quick setup with recommended defaults","trading-assistant.form.advancedModeHint":"Customize all parameters for pros","trading-assistant.form.simpleStep1":"Select Indicator & Pair","trading-assistant.form.simpleStep2":"Launch Mode","trading-assistant.form.simpleDefaultsHint":"Defaults (expand to customize)","trading-assistant.form.showAdvancedSettings":"Show Advanced Settings","trading-assistant.form.hideAdvancedSettings":"Hide Advanced Settings","trading-assistant.form.marketCategory":"Market Category","trading-assistant.form.marketCategoryHint":"Select a market first. Only Crypto can enable live trading; other markets are signal-only.","trading-assistant.market.USStock":"US Stock","trading-assistant.market.Crypto":"Crypto","trading-assistant.market.Forex":"Forex","trading-assistant.form.indicator":"Select Indicator","trading-assistant.form.indicatorHint":"You can only select indicators you have purchased or created","trading-assistant.form.qdtCostHints":"Using strategies will consume QDT, please ensure your account has sufficient QDT balance","trading-assistant.form.indicatorDescription":"Indicator Description","trading-assistant.form.noDescription":"No description","trading-assistant.form.indicatorParams":"Indicator Parameters","trading-assistant.form.indicatorParamsHint":"These parameters will be passed to the indicator code. Different strategies can use different parameter values.","trading-assistant.form.exchange":"Select Exchange","trading-assistant.form.apiKey":"API Key","trading-assistant.form.secretKey":"Secret Key","trading-assistant.form.passphrase":"Passphrase","trading-assistant.form.testConnection":"Test Connection","trading-assistant.form.strategyName":"Strategy Name","trading-assistant.form.symbol":"Trading Pair","trading-assistant.form.symbols":"Trading Pairs (Multi-select)","trading-assistant.form.symbolHint":"Symbol format depends on the selected market","trading-assistant.form.symbolsHint":"Select multiple pairs to create strategies for each","trading-assistant.form.strategyType":"Strategy Type","trading-assistant.form.strategyTypeSingle":"Single Symbol Strategy","trading-assistant.form.strategyTypeCrossSectional":"Cross-Sectional Strategy","trading-assistant.form.strategyTypeHint":"Single Symbol: Trade a single symbol; Cross-Sectional: Manage a portfolio of multiple symbols","trading-assistant.form.symbolList":"Symbol List","trading-assistant.form.symbolListHint":"Select multiple symbols, strategy will rank and rebalance based on indicator scores","trading-assistant.form.portfolioSize":"Portfolio Size","trading-assistant.form.portfolioSizeHint":"Number of symbols to hold simultaneously","trading-assistant.form.longRatio":"Long Ratio","trading-assistant.form.longRatioHint":"Proportion of long positions (0-1), e.g. 0.5 means 50% long, 50% short","trading-assistant.form.rebalanceFrequency":"Rebalance Frequency","trading-assistant.form.rebalanceDaily":"Daily","trading-assistant.form.rebalanceWeekly":"Weekly","trading-assistant.form.rebalanceMonthly":"Monthly","trading-assistant.form.rebalanceFrequencyHint":"Frequency of portfolio rebalancing","trading-assistant.form.addSymbol":"Add Symbol","trading-assistant.form.addSymbolTitle":"Add Symbol to Watchlist","trading-assistant.form.searchSymbolPlaceholder":"Search by code, e.g. BTC, AAPL","trading-assistant.form.noSymbolFound":"No matching symbol found","trading-assistant.form.canDirectAdd":"You can directly add the code","trading-assistant.form.searchSymbolHint":"Enter code to search symbols","trading-assistant.form.confirmAdd":"Confirm Add","trading-assistant.form.addSymbolSuccess":"Symbol added successfully","trading-assistant.form.addSymbolFailed":"Failed to add, please try again","trading-assistant.form.pleaseSelectSymbol":"Please select or enter a symbol","trading-assistant.form.symbolHintCrypto":"Crypto: use trading pairs like BTC/USDT","trading-assistant.form.symbolHintGeneral":"Enter the symbol for the selected market (e.g. 600519, AAPL, EURUSD).","trading-assistant.form.initialCapital":"Initial Capital","trading-assistant.form.marketType":"Market Type","trading-assistant.form.marketTypeFutures":"Futures","trading-assistant.form.marketTypeSpot":"Spot","trading-assistant.form.marketTypeHint":"Futures support bidirectional trading and leverage, spot only supports long positions with fixed 1x leverage","trading-assistant.form.leverage":"Leverage","trading-assistant.form.leverageHint":"Futures: 1-125x, Spot: Fixed 1x","trading-assistant.form.spotLeverageFixed":"Spot trading leverage is fixed at 1x","trading-assistant.form.spotOnlyLongHint":"Spot trading only supports long positions","trading-assistant.form.tradeDirection":"Trade Direction","trading-assistant.form.tradeDirectionLong":"Long Only","trading-assistant.form.tradeDirectionShort":"Short Only","trading-assistant.form.tradeDirectionBoth":"Both","trading-assistant.form.timeframe":"Timeframe","trading-assistant.form.klinePeriod":"K-Line Period","trading-assistant.form.timeframe1m":"1 Minute","trading-assistant.form.timeframe5m":"5 Minutes","trading-assistant.form.timeframe15m":"15 Minutes","trading-assistant.form.timeframe30m":"30 Minutes","trading-assistant.form.timeframe1H":"1 Hour","trading-assistant.form.timeframe4H":"4 Hours","trading-assistant.form.timeframe1D":"1 Day","trading-assistant.form.selectStrategyType":"Select Strategy Type","trading-assistant.form.indicatorStrategy":"Indicator Strategy","trading-assistant.form.indicatorStrategyDesc":"Automated trading strategy based on technical indicators","trading-assistant.form.aiStrategy":"AI Strategy","trading-assistant.form.aiStrategyDesc":"Automated trading strategy based on AI intelligent decision-making","trading-assistant.form.enableAiFilter":"Enable AI Intelligent Decision Filter","trading-assistant.form.enableAiFilterHint":"When enabled, indicator signals will be filtered by AI to improve trading quality","trading-assistant.form.aiFilterPrompt":"Custom Prompt","trading-assistant.form.aiFilterPromptHint":"Provide custom instructions for AI filtering, leave blank to use system default","trading-assistant.validation.strategyTypeRequired":"Please select a strategy type","trading-assistant.validation.marketCategoryRequired":"Please select a market category","trading-assistant.form.advancedSettings":"Advanced Settings","trading-assistant.form.orderMode":"Order Mode","trading-assistant.form.orderModeMaker":"Maker (Limit)","trading-assistant.form.orderModeTaker":"Taker (Market)","trading-assistant.form.orderModeHint":"Maker mode uses limit orders with lower fees; Taker mode executes immediately with higher fees","trading-assistant.form.makerWaitSec":"Maker Wait Time (seconds)","trading-assistant.form.makerWaitSecHint":"Time to wait for order fill before canceling and retrying","trading-assistant.form.makerRetries":"Maker Retries","trading-assistant.form.makerRetriesHint":"Maximum number of retries when maker order is not filled","trading-assistant.form.fallbackToMarket":"Fallback to Market on failure","trading-assistant.form.fallbackToMarketHint":"If limit order (open/close) is not filled, downgrade to market order to ensure execution","trading-assistant.form.marginMode":"Margin Mode","trading-assistant.form.marginModeCross":"Cross Margin","trading-assistant.form.marginModeIsolated":"Isolated Margin","trading-assistant.form.stopLossPct":"Stop Loss (%)","trading-assistant.form.stopLossPctHint":"Set stop loss percentage, 0 means disabled","trading-assistant.form.takeProfitPct":"Take Profit (%)","trading-assistant.form.takeProfitPctHint":"Set take profit percentage, 0 means disabled","trading-assistant.form.commission":"Commission (%)","trading-assistant.form.commissionHint":"Trading fee percentage (optional)","trading-assistant.form.slippage":"Slippage (%)","trading-assistant.form.slippageHint":"Estimated slippage percentage (optional)","trading-assistant.form.executionMode":"Execution","trading-assistant.form.executionModeSignal":"Signal only (push notifications)","trading-assistant.form.executionModeLive":"Live trading","trading-assistant.form.liveTradingCryptoOnlyHint":"Live trading is available for Crypto only. Other markets can only push signals.","trading-assistant.form.liveTradingNotSupportedHint":"Live trading is not available for this market","trading-assistant.form.broker":"Broker","trading-assistant.form.localDeploymentRequired":"⚠️ Local Deployment Required","trading-assistant.form.localDeploymentHint":"IBKR and MT5 are external trading interfaces that require local deployment of QuantDinger. Cloud SaaS mode is not supported. Please ensure you have installed and configured the trading software (TWS/IB Gateway or MT5 terminal) on your local machine.","trading-assistant.form.ibkrConnectionTitle":"Interactive Brokers Connection","trading-assistant.form.ibkrConnectionHint":"Make sure TWS or IB Gateway is running with API enabled","trading-assistant.validation.brokerRequired":"Please select a broker","trading-assistant.placeholders.selectBroker":"Select broker","trading-assistant.brokerNames":{ibkr:"Interactive Brokers (IBKR)",mt5:"MetaTrader 5 (MT5)",mt4:"MetaTrader 4 (MT4)",futu:"Futu Securities",tiger:"Tiger Brokers",td:"TD Ameritrade",schwab:"Charles Schwab"},"trading-assistant.form.ibkrHost":"Host","trading-assistant.form.ibkrPort":"Port","trading-assistant.form.ibkrPortHint":"TWS Live:7497, TWS Paper:7496, Gateway Live:4001, Gateway Paper:4002","trading-assistant.form.ibkrClientId":"Client ID","trading-assistant.form.ibkrAccount":"Account","trading-assistant.form.ibkrAccountHint":"Leave empty to auto-select first account. Specify for multi-account users.","trading-assistant.placeholders.ibkrAccount":"Optional, e.g. U1234567","trading-assistant.exchange.ibkrConnectionSuccess":"IBKR connected successfully","trading-assistant.exchange.ibkrConnectionFailed":"IBKR connection failed. Please check if TWS/Gateway is running.","trading-assistant.exchange.checkLocalDeployment":"Please ensure you are running locally. Cloud SaaS does not support external trading interfaces.","trading-assistant.form.forexBroker":"Forex Broker","trading-assistant.form.mt5ConnectionTitle":"MetaTrader 5 Connection","trading-assistant.form.mt5ConnectionHint":"Make sure MT5 terminal is running and logged in (Windows only)","trading-assistant.form.mt5Server":"Server","trading-assistant.form.mt5ServerHint":"Broker server name (e.g., ICMarkets-Demo)","trading-assistant.form.mt5Login":"Account Number","trading-assistant.form.mt5Password":"Password","trading-assistant.form.mt5TerminalPath":"MT5 Terminal Path (Optional)","trading-assistant.form.mt5TerminalPathHint":"If MT5 terminal is not installed in the default location, specify the full path to terminal64.exe (e.g., C:\\Program Files\\MetaTrader 5\\terminal64.exe)","trading-assistant.placeholders.mt5Server":"e.g., ICMarkets-Demo","trading-assistant.placeholders.mt5Login":"e.g., 12345678","trading-assistant.placeholders.mt5Password":"Your MT5 password","trading-assistant.placeholders.mt5TerminalPath":"e.g., C:\\Program Files\\MetaTrader 5\\terminal64.exe","trading-assistant.validation.mt5ServerRequired":"Please enter MT5 server","trading-assistant.validation.mt5LoginRequired":"Please enter MT5 account number","trading-assistant.validation.mt5PasswordRequired":"Please enter MT5 password","trading-assistant.validation.portfolioSizeRequired":"Please enter portfolio size","trading-assistant.validation.longRatioRequired":"Please enter long ratio","trading-assistant.exchange.mt5ConnectionSuccess":"MT5 connected successfully","trading-assistant.exchange.mt5ConnectionFailed":"MT5 connection failed. Please check if terminal is running.","trading-assistant.form.notifyChannels":"Notification Channels","trading-assistant.form.notifyChannelsHint":"Choose how you want to receive buy/sell and risk-management signals.","trading-assistant.notify.browser":"Browser","trading-assistant.notify.email":"Email","trading-assistant.notify.phone":"Phone","trading-assistant.notify.telegram":"Telegram","trading-assistant.notify.discord":"Discord","trading-assistant.notify.webhook":"Webhook","trading-assistant.form.notifyEmail":"Email","trading-assistant.form.notifyPhone":"Phone number","trading-assistant.form.notifyTelegram":"Telegram (chat id / username)","trading-assistant.form.notifyDiscord":"Discord (webhook url)","trading-assistant.form.notifyWebhook":"Webhook URL","trading-assistant.form.liveTradingConfigTitle":"Exchange Credentials","trading-assistant.form.liveTradingConfigHint":"Provide your exchange API credentials. You can test the connection before saving.","trading-assistant.form.savedCredential":"Saved credential","trading-assistant.form.savedCredentialHint":"Select a saved credential to auto-fill API keys (optional).","trading-assistant.form.saveCredential":"Save this credential for future use","trading-assistant.form.credentialName":"Credential name (optional)","trading-assistant.form.signalMode":"Signal Mode","trading-assistant.form.signalModeConfirmed":"Confirmed","trading-assistant.form.signalModeAggressive":"Aggressive","trading-assistant.form.signalModeHint":"Confirmed: only check completed candles; Aggressive: also check forming candles","trading-assistant.form.cancel":"Cancel","trading-assistant.form.prev":"Previous","trading-assistant.form.next":"Next","trading-assistant.form.confirmCreate":"Confirm Create","trading-assistant.form.confirmEdit":"Confirm Edit","trading-assistant.messages.createSuccess":"Strategy created successfully","trading-assistant.messages.createFailed":"Failed to create strategy","trading-assistant.messages.updateSuccess":"Strategy updated successfully","trading-assistant.messages.updateFailed":"Failed to update strategy","trading-assistant.messages.deleteSuccess":"Strategy deleted successfully","trading-assistant.messages.deleteFailed":"Failed to delete strategy","trading-assistant.messages.startSuccess":"Strategy started successfully","trading-assistant.messages.startFailed":"Failed to start strategy","trading-assistant.messages.stopSuccess":"Strategy stopped successfully","trading-assistant.messages.stopFailed":"Failed to stop strategy","trading-assistant.messages.loadFailed":"Failed to load strategy list","trading-assistant.messages.runningWarning":"Strategy is running, please stop it before editing","trading-assistant.messages.deleteConfirmWithName":'Are you sure you want to delete strategy "{name}"? This action cannot be undone.',"trading-assistant.messages.deleteConfirm":"Are you sure you want to delete this strategy? This action cannot be undone.","trading-assistant.messages.loadTradesFailed":"Failed to load trading records","trading-assistant.messages.loadPositionsFailed":"Failed to load position records","trading-assistant.messages.loadEquityFailed":"Failed to load equity curve","trading-assistant.messages.loadIndicatorsFailed":"Failed to load indicator list, please try again later","trading-assistant.messages.spotLimitations":"Spot trading has been automatically set to long only with 1x leverage","trading-assistant.messages.autoFillApiConfig":"Auto-filled API configuration for this exchange from history","trading-assistant.messages.batchCreateSuccess":"Successfully created {count} strategies","trading-assistant.messages.batchStartSuccess":"Successfully started {count} strategies","trading-assistant.messages.batchStartFailed":"Failed to start strategies","trading-assistant.messages.batchStopSuccess":"Successfully stopped {count} strategies","trading-assistant.messages.batchStopFailed":"Failed to stop strategies","trading-assistant.messages.batchDeleteSuccess":"Successfully deleted {count} strategies","trading-assistant.messages.batchDeleteFailed":"Failed to delete strategies","trading-assistant.messages.batchDeleteConfirm":'Are you sure you want to delete {count} strategies in group "{name}"? This action cannot be undone.',"trading-assistant.placeholders.selectIndicator":"Please select an indicator","trading-assistant.placeholders.selectExchange":"Please select an exchange","trading-assistant.placeholders.selectMarketCategory":"Please select market category","trading-assistant.placeholders.inputApiKey":"Please enter API Key","trading-assistant.placeholders.inputSecretKey":"Please enter Secret Key","trading-assistant.placeholders.inputPassphrase":"Please enter Passphrase","trading-assistant.placeholders.inputStrategyName":"Please enter strategy name","trading-assistant.placeholders.selectSymbol":"Please select trading pair","trading-assistant.placeholders.selectSymbols":"Please select trading pairs (multi-select)","trading-assistant.placeholders.inputSymbol":"Please enter symbol","trading-assistant.placeholders.selectTimeframe":"Please select timeframe","trading-assistant.placeholders.selectKlinePeriod":"Please select K-line period","trading-assistant.placeholders.inputAiFilterPrompt":"Please enter custom prompt (optional)","trading-assistant.placeholders.inputEmail":"Please enter email","trading-assistant.placeholders.inputPhone":"Please enter phone number","trading-assistant.placeholders.inputTelegram":"Please enter Telegram chat id / username","trading-assistant.placeholders.inputDiscord":"Please enter Discord webhook url","trading-assistant.placeholders.inputWebhook":"Please enter webhook url","trading-assistant.placeholders.selectSavedCredential":"Select saved credential","trading-assistant.placeholders.inputCredentialName":"For example: Binance main key","trading-assistant.validation.indicatorRequired":"Please select an indicator","trading-assistant.validation.exchangeRequired":"Please select an exchange","trading-assistant.validation.apiKeyRequired":"Please enter API Key","trading-assistant.validation.secretKeyRequired":"Please enter Secret Key","trading-assistant.validation.passphraseRequired":"Please enter Passphrase","trading-assistant.validation.exchangeConfigIncomplete":"Please fill in complete exchange configuration information","trading-assistant.validation.testConnectionRequired":'Please click "Test Connection" button and ensure the connection is successful',"trading-assistant.validation.testConnectionFailed":"Connection test failed, please check the configuration and test again","trading-assistant.validation.credentialRequired":"Please add and test exchange credentials in Personal Center first","trading-assistant.validation.strategyNameRequired":"Please enter strategy name","trading-assistant.validation.symbolRequired":"Please select trading pair","trading-assistant.validation.symbolsRequired":"Please select at least one trading pair","trading-assistant.validation.initialCapitalRequired":"Please enter initial capital","trading-assistant.validation.leverageRequired":"Please enter leverage","trading-assistant.validation.emailInvalid":"Invalid email address","trading-assistant.validation.notifyChannelRequired":"Please select at least one notification channel","trading-assistant.table.time":"Time","trading-assistant.table.type":"Type","trading-assistant.table.price":"Price","trading-assistant.table.amount":"Amount","trading-assistant.table.value":"Value","trading-assistant.table.commission":"Commission","trading-assistant.table.symbol":"Trading Pair","trading-assistant.table.side":"Side","trading-assistant.table.size":"Position Size","trading-assistant.table.entryPrice":"Entry Price","trading-assistant.table.currentPrice":"Current Price","trading-assistant.table.unrealizedPnl":"Unrealized P&L","trading-assistant.table.pnlPercent":"P&L %","trading-assistant.table.buy":"Buy","trading-assistant.table.sell":"Sell","trading-assistant.table.long":"Long","trading-assistant.table.short":"Short","trading-assistant.table.noPositions":"No positions","trading-assistant.detail.title":"Strategy Details","trading-assistant.detail.strategyName":"Strategy Name","trading-assistant.detail.strategyType":"Strategy Type","trading-assistant.detail.status":"Status","trading-assistant.detail.tradingMode":"Trading Mode","trading-assistant.detail.exchange":"Exchange","trading-assistant.detail.initialCapital":"Initial Capital","trading-assistant.detail.totalInvestment":"Total Investment","trading-assistant.detail.currentEquity":"Current Equity","trading-assistant.detail.totalPnl":"Total P&L","trading-assistant.detail.indicatorName":"Indicator Name","trading-assistant.detail.maxLeverage":"Max Leverage","trading-assistant.detail.decideInterval":"Decision Interval","trading-assistant.detail.symbols":"Trading Symbols","trading-assistant.detail.createdAt":"Created At","trading-assistant.detail.updatedAt":"Updated At","trading-assistant.detail.llmConfig":"AI Model Configuration","trading-assistant.detail.exchangeConfig":"Exchange Configuration","trading-assistant.detail.provider":"Provider","trading-assistant.detail.modelId":"Model ID","trading-assistant.detail.close":"Close","trading-assistant.detail.loadFailed":"Failed to load strategy details","trading-assistant.equity.noData":"No equity data","trading-assistant.equity.equity":"Equity","trading-assistant.exchange.tradingMode":"Trading Mode","trading-assistant.exchange.virtual":"Virtual Trading","trading-assistant.exchange.live":"Live Trading","trading-assistant.exchange.selectExchange":"Select Exchange","trading-assistant.exchange.walletAddress":"Wallet Address","trading-assistant.exchange.walletAddressPlaceholder":"Please enter wallet address (starts with 0x)","trading-assistant.exchange.privateKey":"Private Key","trading-assistant.exchange.privateKeyPlaceholder":"Please enter private key (64 characters)","trading-assistant.exchange.testConnection":"Test Connection","trading-assistant.exchange.connectionSuccess":"Connection successful","trading-assistant.exchange.connectionFailed":"Connection failed","trading-assistant.exchange.testFailed":"Connection test failed","trading-assistant.exchange.fillComplete":"Please fill in complete exchange configuration information","trading-assistant.exchange.ipWhitelistTip":"Please add the following IPs to the whitelist in your exchange API settings:","trading-assistant.strategyTypeOptions.ai":"AI-Driven Strategy","trading-assistant.strategyTypeOptions.indicator":"Indicator Strategy","trading-assistant.strategyTypeOptions.aiDeveloping":"AI-Driven Strategy feature is under development, stay tuned","trading-assistant.strategyTypeOptions.aiDevelopingWarning":"AI-Driven Strategy feature is under development","trading-assistant.indicatorType.trend":"Trend","trading-assistant.indicatorType.momentum":"Momentum","trading-assistant.indicatorType.volatility":"Volatility","trading-assistant.indicatorType.volume":"Volume","trading-assistant.indicatorType.custom":"Custom","trading-assistant.exchangeNames":{okx:"OKX",binance:"Binance",hyperliquid:"Hyperliquid",blockchaincom:"Blockchain.com",coinbaseexchange:"Coinbase",gate:"Gate.io",mexc:"MEXC",kraken:"Kraken",bitfinex:"Bitfinex",bybit:"Bybit",kucoin:"KuCoin",huobi:"Huobi",bitget:"Bitget",bitmex:"BitMEX",deribit:"Deribit",phemex:"Phemex",bitmart:"BitMart",bitstamp:"Bitstamp",bittrex:"Bittrex",poloniex:"Poloniex",gemini:"Gemini",cryptocom:"Crypto.com",bitflyer:"bitFlyer",upbit:"Upbit",bithumb:"Bithumb",coinone:"Coinone",zb:"ZB",lbank:"LBank",bibox:"Bibox",bigone:"BigONE",bitrue:"Bitrue",coinex:"CoinEx",digifinex:"DigiFinex",ftx:"FTX",ftxus:"FTX US",binanceus:"Binance US",binancecoinm:"Binance COIN-M",binanceusdm:"Binance USDⓈ-M",ibkr:"Interactive Brokers (IBKR)",deepcoin:"Deepcoin"},"ai-trading-assistant.title":"AI Trading Assistant","ai-trading-assistant.strategyList":"Strategy List","ai-trading-assistant.createStrategy":"Create Strategy","ai-trading-assistant.noStrategy":"No strategies","ai-trading-assistant.selectStrategy":"Please select a strategy from the left to view details","ai-trading-assistant.startStrategy":"Start Strategy","ai-trading-assistant.stopStrategy":"Stop Strategy","ai-trading-assistant.editStrategy":"Edit Strategy","ai-trading-assistant.deleteStrategy":"Delete Strategy","ai-trading-assistant.status.running":"Running","ai-trading-assistant.status.stopped":"Stopped","ai-trading-assistant.status.error":"Error","ai-trading-assistant.tabs.tradingRecords":"Trading Records","ai-trading-assistant.tabs.positions":"Positions","ai-trading-assistant.tabs.aiDecisions":"AI Decisions","ai-trading-assistant.tabs.equityCurve":"Equity Curve","ai-trading-assistant.form.createTitle":"Create AI Trading Strategy","ai-trading-assistant.form.editTitle":"Edit AI Trading Strategy","ai-trading-assistant.form.strategyName":"Strategy Name","ai-trading-assistant.form.modelId":"AI Model","ai-trading-assistant.form.modelIdHint":"Using system OpenRouter service, no API Key configuration needed","ai-trading-assistant.form.decideInterval":"Decision Interval","ai-trading-assistant.form.decideInterval5m":"5 Minutes","ai-trading-assistant.form.decideInterval10m":"10 Minutes","ai-trading-assistant.form.decideInterval30m":"30 Minutes","ai-trading-assistant.form.decideInterval1h":"1 Hour","ai-trading-assistant.form.decideInterval4h":"4 Hours","ai-trading-assistant.form.decideInterval1d":"1 Day","ai-trading-assistant.form.decideInterval1w":"1 Week","ai-trading-assistant.form.decideIntervalHint":"Time interval for AI decision making","ai-trading-assistant.form.runPeriod":"Run Period","ai-trading-assistant.form.runPeriodHint":"Start and end time for strategy execution","ai-trading-assistant.form.startDate":"Start Date","ai-trading-assistant.form.endDate":"End Date","ai-trading-assistant.form.qdtCostTitle":"QDT Cost Notice","ai-trading-assistant.form.qdtCostHint":"Each AI decision will cost {cost} QDT. Please ensure your account has sufficient QDT balance. During strategy execution, each decision will be charged in real-time.","ai-trading-assistant.form.apiKey":"API Key","ai-trading-assistant.form.exchange":"Select Exchange","ai-trading-assistant.form.secretKey":"Secret Key","ai-trading-assistant.form.passphrase":"Passphrase","ai-trading-assistant.form.testConnection":"Test Connection","ai-trading-assistant.form.symbol":"Trading Pair","ai-trading-assistant.form.symbolHint":"Select the trading pair to trade","ai-trading-assistant.form.initialCapital":"Initial Capital (Margin)","ai-trading-assistant.form.leverage":"Leverage","ai-trading-assistant.form.timeframe":"Timeframe","ai-trading-assistant.form.timeframe1m":"1 Minute","ai-trading-assistant.form.timeframe5m":"5 Minutes","ai-trading-assistant.form.timeframe15m":"15 Minutes","ai-trading-assistant.form.timeframe30m":"30 Minutes","ai-trading-assistant.form.timeframe1H":"1 Hour","ai-trading-assistant.form.timeframe4H":"4 Hours","ai-trading-assistant.form.timeframe1D":"1 Day","ai-trading-assistant.form.marketType":"Market Type","ai-trading-assistant.form.marketTypeFutures":"Futures","ai-trading-assistant.form.marketTypeSpot":"Spot","ai-trading-assistant.form.totalPnl":"Total PnL","ai-trading-assistant.form.customPrompt":"Custom Prompt","ai-trading-assistant.form.customPromptHint":"Optional, used to customize AI trading strategy and decision logic","ai-trading-assistant.form.cancel":"Cancel","ai-trading-assistant.form.prev":"Previous","ai-trading-assistant.form.next":"Next","ai-trading-assistant.form.confirmCreate":"Confirm Create","ai-trading-assistant.form.confirmEdit":"Confirm Edit","ai-trading-assistant.messages.createSuccess":"Strategy created successfully","ai-trading-assistant.messages.createFailed":"Failed to create strategy","ai-trading-assistant.messages.updateSuccess":"Strategy updated successfully","ai-trading-assistant.messages.updateFailed":"Failed to update strategy","ai-trading-assistant.messages.deleteSuccess":"Strategy deleted successfully","ai-trading-assistant.messages.deleteFailed":"Failed to delete strategy","ai-trading-assistant.messages.startSuccess":"Strategy started successfully","ai-trading-assistant.messages.startFailed":"Failed to start strategy","ai-trading-assistant.messages.stopSuccess":"Strategy stopped successfully","ai-trading-assistant.messages.stopFailed":"Failed to stop strategy","ai-trading-assistant.messages.loadFailed":"Failed to load strategy list","ai-trading-assistant.messages.loadDecisionsFailed":"Failed to load AI decision records","ai-trading-assistant.messages.deleteConfirm":"Are you sure you want to delete this strategy? This action cannot be undone.","ai-trading-assistant.placeholders.inputStrategyName":"Please enter strategy name","ai-trading-assistant.placeholders.selectModelId":"Please select AI model","ai-trading-assistant.placeholders.selectDecideInterval":"Please select decision interval","ai-trading-assistant.placeholders.startTime":"Start Time","ai-trading-assistant.placeholders.endTime":"End Time","ai-trading-assistant.placeholders.inputApiKey":"Please enter API Key","ai-trading-assistant.placeholders.selectExchange":"Please select an exchange","ai-trading-assistant.placeholders.inputSecretKey":"Please enter Secret Key","ai-trading-assistant.placeholders.inputPassphrase":"Please enter Passphrase","ai-trading-assistant.placeholders.selectSymbol":"Please select trading pair, e.g.: BTC/USDT","ai-trading-assistant.placeholders.selectTimeframe":"Please select timeframe","ai-trading-assistant.placeholders.inputCustomPrompt":"Please enter custom prompt (optional)","ai-trading-assistant.validation.strategyNameRequired":"Please enter strategy name","ai-trading-assistant.validation.modelIdRequired":"Please select AI model","ai-trading-assistant.validation.runPeriodRequired":"Please select run period","ai-trading-assistant.validation.apiKeyRequired":"Please enter API Key","ai-trading-assistant.validation.exchangeRequired":"Please select an exchange","ai-trading-assistant.validation.secretKeyRequired":"Please enter Secret Key","ai-trading-assistant.validation.symbolRequired":"Please select trading pair","ai-trading-assistant.validation.initialCapitalRequired":"Please enter initial capital","ai-trading-assistant.table.time":"Time","ai-trading-assistant.table.type":"Type","ai-trading-assistant.table.price":"Price","ai-trading-assistant.table.amount":"Amount","ai-trading-assistant.table.value":"Value","ai-trading-assistant.table.symbol":"Trading Pair","ai-trading-assistant.table.side":"Side","ai-trading-assistant.table.size":"Position Size","ai-trading-assistant.table.entryPrice":"Entry Price","ai-trading-assistant.table.currentPrice":"Current Price","ai-trading-assistant.table.unrealizedPnl":"Unrealized P&L","ai-trading-assistant.table.profit":"Profit","ai-trading-assistant.table.openLong":"Open Long","ai-trading-assistant.table.closeLong":"Close Long","ai-trading-assistant.table.openShort":"Open Short","ai-trading-assistant.table.closeShort":"Close Short","ai-trading-assistant.table.addLong":"Add Long","ai-trading-assistant.table.addShort":"Add Short","ai-trading-assistant.table.closeShortProfit":"Close Short (TP)","ai-trading-assistant.table.closeShortStop":"Close Short (SL)","ai-trading-assistant.table.closeLongProfit":"Close Long (TP)","ai-trading-assistant.table.closeLongStop":"Close Long (SL)","ai-trading-assistant.table.buy":"Buy","ai-trading-assistant.table.sell":"Sell","ai-trading-assistant.table.long":"Long","ai-trading-assistant.table.short":"Short","ai-trading-assistant.table.hold":"Hold","ai-trading-assistant.table.reasoning":"Analysis Reasoning","ai-trading-assistant.table.decisions":"Decisions","ai-trading-assistant.table.riskAssessment":"Risk","ai-trading-assistant.table.confidence":"Confidence","ai-trading-assistant.table.totalRecords":"Total {total} records","ai-trading-assistant.table.noPositions":"No positions","ai-trading-assistant.detail.title":"Strategy Details","ai-trading-assistant.equity.noData":"No equity data","ai-trading-assistant.equity.equity":"Equity","ai-trading-assistant.exchange.testFailed":"Connection test failed","ai-trading-assistant.exchange.connectionSuccess":"Connection successful","ai-trading-assistant.exchange.connectionFailed":"Connection failed","ai-trading-assistant.form.advancedSettings":"Advanced Settings","ai-trading-assistant.form.orderMode":"Order Mode","ai-trading-assistant.form.orderModeMaker":"Maker (Limit)","ai-trading-assistant.form.orderModeTaker":"Taker (Market)","ai-trading-assistant.form.orderModeHint":"Maker mode uses limit orders with lower fees; Taker mode executes immediately with higher fees","ai-trading-assistant.form.makerWaitSec":"Maker Wait Time (seconds)","ai-trading-assistant.form.makerWaitSecHint":"Time to wait for order fill before canceling and retrying","ai-trading-assistant.form.makerRetries":"Maker Retries","ai-trading-assistant.form.makerRetriesHint":"Maximum number of retries when maker order is not filled","ai-trading-assistant.form.fallbackToMarket":"Fallback to Market on failure","ai-trading-assistant.form.fallbackToMarketHint":"If limit order (open/close) is not filled, downgrade to market order to ensure execution","ai-trading-assistant.form.marginMode":"Margin Mode","ai-trading-assistant.form.marginModeCross":"Cross Margin","ai-trading-assistant.form.marginModeIsolated":"Isolated Margin","ai-analysis.title":"Quantum Trading Engine","ai-analysis.system.online":"ONLINE","ai-analysis.system.agents":"AGENTS","ai-analysis.system.active":"ACTIVE","ai-analysis.system.stage":"STAGE","ai-analysis.panel.roster":"AGENTS ROSTER","ai-analysis.panel.thinking":"Thinking...","ai-analysis.panel.done":"Done","ai-analysis.panel.standby":"Standby","ai-analysis.input.title":"QUANTUM TRADING ENGINE","ai-analysis.input.placeholder":"SELECT TARGET ASSET (e.g. BTC/USDT)","ai-analysis.input.watchlist":"Watchlist","ai-analysis.input.start":"START ANALYSIS","ai-analysis.input.recent":"RECENT MISSIONS:","ai-analysis.vis.stage":"STAGE","ai-analysis.vis.processing":"PROCESSING","ai-analysis.result.complete":"ANALYSIS COMPLETE","ai-analysis.result.signal":"FINAL SIGNAL","ai-analysis.result.confidence":"CONFIDENCE:","ai-analysis.result.new":"NEW ANALYSIS","ai-analysis.result.full":"VIEW FULL DOSSIER","ai-analysis.logs.title":"SYSTEM LOGS","ai-analysis.modal.title":"CLASSIFIED REPORT","ai-analysis.modal.fundamental":"FUNDAMENTAL ANALYSIS","ai-analysis.modal.technical":"TECHNICAL ANALYSIS","ai-analysis.modal.sentiment":"SENTIMENT ANALYSIS","ai-analysis.modal.risk":"RISK ASSESSMENT","ai-analysis.stage.idle":"IDLE","ai-analysis.stage.1":"PHASE 1: MULTI-DIMENSIONAL ANALYSIS","ai-analysis.stage.2":"PHASE 2: BULL/BEAR DEBATE","ai-analysis.stage.3":"PHASE 3: STRATEGIC PLANNING","ai-analysis.stage.4":"PHASE 4: RISK COMMITTEE REVIEW","ai-analysis.stage.complete":"COMPLETE","ai-analysis.agent.investment_director":"Investment Director","ai-analysis.agent.role.investment_director":"Comprehensive Analysis & Final Conclusion","ai-analysis.agent.market":"Market Analyst","ai-analysis.agent.role.market":"Technical & Market Data","ai-analysis.agent.fundamental":"Fundamental Analyst","ai-analysis.agent.role.fundamental":"Financials & Valuation","ai-analysis.agent.technical":"Technical Analyst","ai-analysis.agent.role.technical":"Technical Indicators & Charts","ai-analysis.agent.news":"News Analyst","ai-analysis.agent.role.news":"Global News Filter","ai-analysis.agent.sentiment":"Sentiment Analyst","ai-analysis.agent.role.sentiment":"Social & Emotional","ai-analysis.agent.risk":"Risk Analyst","ai-analysis.agent.role.risk":"Basic Risk Check","ai-analysis.agent.bull":"Bull Researcher","ai-analysis.agent.role.bull":"Growth Catalyst Hunter","ai-analysis.agent.bear":"Bear Researcher","ai-analysis.agent.role.bear":"Risk & Flaw Hunter","ai-analysis.agent.manager":"Research Manager","ai-analysis.agent.role.manager":"Debate Moderator","ai-analysis.agent.trader":"Trader Agent","ai-analysis.agent.role.trader":"Execution Strategist","ai-analysis.agent.risky":"Risky Analyst","ai-analysis.agent.role.risky":"Aggressive Strategy","ai-analysis.agent.neutral":"Neutral Analyst","ai-analysis.agent.role.neutral":"Balanced Strategy","ai-analysis.agent.safe":"Safe Analyst","ai-analysis.agent.role.safe":"Conservative Strategy","ai-analysis.agent.cro":"Risk Manager (CRO)","ai-analysis.agent.role.cro":"Final Decision Authority","ai-analysis.script.market":"Fetching OHLCV data from major exchanges...","ai-analysis.script.fundamental":"Retrieving quarterly financial reports...","ai-analysis.script.technical":"Analyzing technical indicators and chart patterns...","ai-analysis.script.news":"Scanning global financial news feeds...","ai-analysis.script.sentiment":"Analyzing social media trends...","ai-analysis.script.risk":"Calculating historical volatility...","invite.inviteLink":"Invite Link","invite.copy":"Copy Link","invite.copySuccess":"Copied successfully!","invite.copyFailed":"Copy failed, please copy manually","invite.noInviteLink":"Invite link not generated","invite.totalInvites":"Total Invites","invite.totalReward":"Total Reward","invite.rules":"Invite Rules","invite.rule1":"You will receive a reward for each friend you successfully invite to register","invite.rule2":"When your invited friend completes their first transaction, you will receive an additional reward","invite.rule3":"Invite rewards will be directly credited to your account","invite.inviteList":"Invite List","invite.tasks":"Task Center","invite.inviteeName":"Invitee","invite.inviteTime":"Invite Time","invite.status":"Status","invite.reward":"Reward","invite.active":"Active","invite.inactive":"Inactive","invite.completed":"Completed","invite.claimed":"Claimed","invite.pending":"Pending","invite.goToTask":"Go to Task","invite.claimReward":"Claim Reward","invite.verify":"Verify","invite.verifySuccess":"Verification successful! Task completed","invite.verifyNotCompleted":"Task not completed yet, please complete the task first","invite.verifyFailed":"Verification failed, please try again later","invite.claimSuccess":"Successfully claimed {reward} QDT!","invite.claimFailed":"Claim failed, please try again later","invite.totalRecords":"Total {total} records","invite.task.twitter.title":"Share Tweet on X (Twitter)","invite.task.twitter.desc":"Share our official tweet to your X (Twitter) account","invite.task.youtube.title":"Follow our YouTube Channel","invite.task.youtube.desc":"Subscribe and follow our official YouTube channel","invite.task.telegram.title":"Join Telegram Group","invite.task.telegram.desc":"Join our official Telegram community group","invite.task.discord.title":"Join Discord Server","invite.task.discord.desc":"Join our Discord community server",message:"-","layouts.usermenu.dialog.title":"Message","layouts.usermenu.dialog.content":"Are you sure you would like to logout?","layouts.userLayout.title":"Clarity from Uncertainty","signal-robot.title":"Signal Robot Console","signal-robot.createBot":"Create New Bot","signal-robot.search.nameOrSymbol":"Name/Symbol","signal-robot.search.placeholder":"Search bot name or symbol","signal-robot.search.status":"Status","signal-robot.search.statusAll":"All","signal-robot.search.statusRunning":"Running","signal-robot.search.statusPaused":"Paused","signal-robot.search.query":"Query","signal-robot.search.reset":"Reset","signal-robot.table.botName":"Bot Name","signal-robot.table.symbolTimeframe":"Symbol/Timeframe","signal-robot.table.triggerStrategy":"Trigger Strategy","signal-robot.table.notificationChannels":"Notification Channels","signal-robot.table.status":"Status","signal-robot.table.action":"Action","signal-robot.table.triggerConditions":"{count} trigger conditions","signal-robot.table.monitoring":"Monitoring","signal-robot.table.paused":"Paused","signal-robot.table.edit":"Edit","signal-robot.table.pause":"Pause","signal-robot.table.start":"Start","signal-robot.table.delete":"Delete","signal-robot.table.deleteConfirm":"Are you sure you want to delete this bot?","signal-robot.table.deleteSuccess":"Deleted successfully","signal-robot.table.startSuccess":"Bot started","signal-robot.table.pauseSuccess":"Bot paused","signal-robot.channel.telegram":"Telegram","signal-robot.channel.discord":"Discord","signal-robot.channel.email":"Email","signal-robot.channel.webhook":"Webhook","signal-robot.channel.browser":"Browser Push","signal-robot.modal.createTitle":"Create New Signal Robot","signal-robot.modal.editTitle":"Edit Signal Robot","signal-robot.modal.step.basic":"Basic Settings","signal-robot.modal.step.entry":"Entry Strategy","signal-robot.modal.step.position":"Position Management","signal-robot.modal.step.risk":"Risk Control","signal-robot.modal.step.notify":"Notification Config","signal-robot.modal.prev":"Previous","signal-robot.modal.next":"Next","signal-robot.modal.preview":"Preview Backtest","signal-robot.modal.complete":"Complete & Run","signal-robot.modal.saveSuccess":"Saved successfully","signal-robot.modal.previewDeveloping":"Preview feature is under development...","signal-robot.modal.basicInfoRequired":"Please complete basic information","signal-robot.basic.alert":"Set basic information for the bot","signal-robot.basic.title":"Basic Information","signal-robot.basic.botName":"Bot Name","signal-robot.basic.botNamePlaceholder":"e.g.: BTC SuperTrend Strategy","signal-robot.basic.symbol":"Trading Pair","signal-robot.basic.symbolPlaceholder":"Select from watchlist","signal-robot.basic.noWatchlist":"No watchlist items, please add in market page first","signal-robot.basic.timeframe":"K-Line Period","signal-robot.basic.timeframe15m":"15 Minutes","signal-robot.basic.timeframe30m":"30 Minutes","signal-robot.basic.timeframe1h":"1 Hour","signal-robot.basic.timeframe4h":"4 Hours","signal-robot.basic.timeframe1d":"1 Day","signal-robot.basic.autoNameSuggestion":"{symbol} Signal Robot","signal-robot.entry.alert":"Trigger entry signal when all conditions below are met","signal-robot.entry.condition":"Condition {index}","signal-robot.entry.indicator":"Indicator","signal-robot.entry.indicatorSupertrend":"SuperTrend","signal-robot.entry.indicatorEma":"EMA (Exponential Moving Average)","signal-robot.entry.indicatorRsi":"RSI (Relative Strength Index)","signal-robot.entry.indicatorMacd":"MACD","signal-robot.entry.indicatorBollinger":"Bollinger Bands","signal-robot.entry.atrPeriod":"ATR Period","signal-robot.entry.multiplier":"Multiplier","signal-robot.entry.triggerSignal":"Trigger Signal","signal-robot.entry.signalTrendBullish":"Trend Bullish","signal-robot.entry.signalTrendBearish":"Trend Bearish","signal-robot.entry.signalIsUptrend":"Is Uptrend","signal-robot.entry.signalIsDowntrend":"Is Downtrend","signal-robot.entry.period":"Period","signal-robot.entry.compareCondition":"Compare Condition","signal-robot.entry.priceAbove":"Price > EMA (Price Above)","signal-robot.entry.priceBelow":"Price < EMA (Price Below)","signal-robot.entry.crossUp":"Price Crosses Above EMA (Golden Cross)","signal-robot.entry.crossDown":"Price Crosses Below EMA (Death Cross)","signal-robot.entry.compare":"Compare","signal-robot.entry.greaterThan":"Greater Than","signal-robot.entry.lessThan":"Less Than","signal-robot.entry.crossUpShort":"Cross Up","signal-robot.entry.crossDownShort":"Cross Down","signal-robot.entry.threshold":"Threshold","signal-robot.entry.selectIndicator":"Please select an indicator to configure parameters","signal-robot.entry.addCondition":"Add Condition","signal-robot.position.alert":"Configure initial position size, leverage and pyramiding rules","signal-robot.position.basicTitle":"Basic Position Management","signal-robot.position.initialSize":"Initial Size (Capital %)","signal-robot.position.initialSizeHint":"Recommended 5% - 20%","signal-robot.position.leverage":"Leverage","signal-robot.position.leverageHint":"Please ensure your exchange account supports this leverage","signal-robot.position.maxPyramiding":"Max Pyramiding Times","signal-robot.position.maxPyramidingHint":"0 means no pyramiding","signal-robot.position.pyramidingTitle":"Pyramiding Rules","signal-robot.position.pyramidingEnabled":"Enabled","signal-robot.position.pyramidingDisabled":"Disabled","signal-robot.position.pyramidingCondition":"Pyramiding Trigger Condition","signal-robot.position.priceRisePct":"Price Rises (Long) / Falls (Short)","signal-robot.position.profitPct":"Profit Reaches","signal-robot.position.triggerThreshold":"Trigger Threshold (%)","signal-robot.position.triggerThresholdHint":"e.g. 3%: add position once every 3% rise","signal-robot.position.addSize":"Single Add Size (Capital %)","signal-robot.position.pyramidingDisabledHint":"Pyramiding disabled, only initial position will be executed","signal-robot.risk.alert":"Configure take profit, stop loss and exit rules","signal-robot.risk.stopLossTitle":"Stop Loss","signal-robot.risk.stopLossEnabled":"Enabled","signal-robot.risk.stopLossDisabled":"Disabled","signal-robot.risk.stopLossType":"Stop Loss Type","signal-robot.risk.stopLossFixedPct":"Fixed Percentage","signal-robot.risk.stopLossAtrMultiplier":"ATR Multiplier","signal-robot.risk.stopLossValue":"Value","signal-robot.risk.stopLossFixedHint":"e.g. 2%: stop loss when loss reaches 2%","signal-robot.risk.stopLossAtrHint":"e.g. 2.0: stop loss when price touches ATR*2.0","signal-robot.risk.stopLossDisabledHint":"Stop loss disabled (high risk)","signal-robot.risk.trailingStopTitle":"Trailing Stop","signal-robot.risk.activationProfit":"Activation Profit (%)","signal-robot.risk.activationProfitHint":"Start trailing when profit reaches this level","signal-robot.risk.callbackPct":"Callback (%)","signal-robot.risk.callbackPctHint":"Trigger take profit when price falls from peak by this percentage","signal-robot.risk.trailingStopDisabledHint":"Trailing stop disabled","signal-robot.risk.otherExitTitle":"Other Exit Rules","signal-robot.risk.signalExit":"Allow Signal Exit","signal-robot.risk.signalExitHint":"Close position immediately when reverse signal appears (e.g. close long when short signal appears)","signal-robot.notify.alert":"Configure notification methods when signal is triggered","signal-robot.notify.channelTitle":"Notification Channels","signal-robot.notify.discordWebhook":"Discord Webhook","signal-robot.notify.genericWebhook":"Generic Webhook","signal-robot.notify.webhookUrl":"Webhook URL","signal-robot.notify.webhookUrlPlaceholder":"https://example.com/webhook","signal-robot.notify.discordUrl":"Discord URL","signal-robot.notify.discordUrlPlaceholder":"https://discord.com/api/webhooks/...","signal-robot.operator.greaterThan":"Greater Than","signal-robot.operator.lessThan":"Less Than","signal-robot.operator.equal":"Equal","signal-robot.operator.goldenCross":"Golden Cross","signal-robot.operator.deathCross":"Death Cross","signal-robot.operator.increaseBy":"Increase By","signal-robot.operator.decreaseBy":"Decrease By","signal-robot.indicator.price":"Price","signal-robot.indicator.rsi":"RSI","signal-robot.indicator.kdjK":"KDJ(K)","signal-robot.indicator.kdjJ":"KDJ(J)","signal-robot.indicator.macd":"MACD","signal-robot.indicator.macdHist":"MACD Histogram","signal-robot.indicator.bollingerUp":"Bollinger Upper","signal-robot.indicator.bollingerLow":"Bollinger Lower","signal-robot.indicator.volume":"Volume","signal-robot.indicator.changePct1h":"1H Change %","signal-robot.indicator.changePct24h":"24H Change %","signal-robot.indicator.signalLine":"Signal Line","settings.title":"System Settings","settings.description":"Configure application settings, API keys, and system preferences","settings.save":"Save Settings","settings.reset":"Reset","settings.saveSuccess":"Settings saved successfully","settings.saveFailed":"Failed to save settings","settings.loadFailed":"Failed to load settings","settings.openrouterBalance":"OpenRouter Account Balance","settings.queryBalance":"Query Balance","settings.balanceUsage":"Used","settings.balanceRemaining":"Remaining","settings.balanceLimit":"Total Limit","settings.balanceQuerySuccess":"Balance query successful","settings.balanceQueryFailed":"Failed to query balance","settings.balanceNotQueried":'Click "Query Balance" to get account info',"settings.default":"Default","settings.pleaseSelect":"Please select","settings.inputApiKey":"Enter key","settings.getApi":"Get API","settings.link.getApi":"Get API","settings.link.getApiKey":"Get API Key","settings.link.getToken":"Get Token","settings.link.createBot":"Create Bot","settings.link.viewModels":"View Models","settings.link.freeRegister":"Free Register","settings.link.supportedExchanges":"Supported Exchanges","settings.link.applyApi":"Apply API","settings.link.createSearchEngine":"Create Search Engine","settings.link.getTurnstileKey":"Get Turnstile Key","settings.link.getGoogleCredentials":"Get Google Credentials","settings.link.getGithubCredentials":"Get GitHub Credentials","settings.restartRequired":"Settings saved. Some changes require Python service restart to take effect.","settings.copyRestartCmd":"Copy restart command","settings.copySuccess":"Copied","settings.copyFailed":"Copy failed","settings.group.server":"Server Configuration","settings.group.auth":"Security & Authentication","settings.group.ai":"AI / LLM Configuration","settings.group.trading":"Live Trading","settings.group.strategy":"Strategy Execution","settings.group.data_source":"Data Sources","settings.group.notification":"Notifications","settings.group.email":"Email (SMTP)","settings.group.sms":"SMS (Twilio)","settings.group.agent":"AI Agent","settings.group.network":"Network & Proxy","settings.group.search":"Web Search","settings.group.security":"Registration & Security","settings.group.app":"Application","settings.field.SECRET_KEY":"Secret Key","settings.field.ADMIN_USER":"Admin Username","settings.field.ADMIN_PASSWORD":"Admin Password","settings.field.ADMIN_EMAIL":"Admin Email","settings.field.ENABLE_REGISTRATION":"Enable Registration","settings.field.TURNSTILE_SITE_KEY":"Turnstile Site Key","settings.field.TURNSTILE_SECRET_KEY":"Turnstile Secret Key","settings.field.FRONTEND_URL":"Frontend URL","settings.field.GOOGLE_CLIENT_ID":"Google Client ID","settings.field.GOOGLE_CLIENT_SECRET":"Google Client Secret","settings.field.GOOGLE_REDIRECT_URI":"Google Redirect URI","settings.field.GITHUB_CLIENT_ID":"GitHub Client ID","settings.field.GITHUB_CLIENT_SECRET":"GitHub Client Secret","settings.field.GITHUB_REDIRECT_URI":"GitHub Redirect URI","settings.field.SECURITY_IP_MAX_ATTEMPTS":"IP Max Failed Attempts","settings.field.SECURITY_IP_WINDOW_MINUTES":"IP Window (minutes)","settings.field.SECURITY_IP_BLOCK_MINUTES":"IP Block Duration (minutes)","settings.field.SECURITY_ACCOUNT_MAX_ATTEMPTS":"Account Max Failed Attempts","settings.field.SECURITY_ACCOUNT_WINDOW_MINUTES":"Account Window (minutes)","settings.field.SECURITY_ACCOUNT_BLOCK_MINUTES":"Account Block Duration (minutes)","settings.field.VERIFICATION_CODE_EXPIRE_MINUTES":"Verification Code Expiry (minutes)","settings.field.VERIFICATION_CODE_RATE_LIMIT":"Code Rate Limit (seconds)","settings.field.VERIFICATION_CODE_IP_HOURLY_LIMIT":"Code Hourly Limit per IP","settings.field.VERIFICATION_CODE_MAX_ATTEMPTS":"Code Max Attempts","settings.field.VERIFICATION_CODE_LOCK_MINUTES":"Code Lock Minutes","settings.field.PYTHON_API_HOST":"Listen Address","settings.field.PYTHON_API_PORT":"Port","settings.field.PYTHON_API_DEBUG":"Debug Mode","settings.field.ENABLE_PENDING_ORDER_WORKER":"Enable Order Worker","settings.field.PENDING_ORDER_STALE_SEC":"Order Stale Timeout (sec)","settings.field.ORDER_MODE":"Order Mode","settings.field.MAKER_WAIT_SEC":"Limit Order Wait Time (sec)","settings.field.MAKER_OFFSET_BPS":"Limit Order Price Offset (bps)","settings.field.SIGNAL_WEBHOOK_URL":"Webhook URL","settings.field.SIGNAL_WEBHOOK_TOKEN":"Webhook Token","settings.field.SIGNAL_NOTIFY_TIMEOUT_SEC":"Notify Timeout (sec)","settings.field.TELEGRAM_BOT_TOKEN":"Telegram Bot Token","settings.field.SMTP_HOST":"SMTP Host","settings.field.SMTP_PORT":"SMTP Port","settings.field.SMTP_USER":"SMTP Username","settings.field.SMTP_PASSWORD":"SMTP Password","settings.field.SMTP_FROM":"From Address","settings.field.SMTP_USE_TLS":"Use TLS","settings.field.SMTP_USE_SSL":"Use SSL","settings.field.TWILIO_ACCOUNT_SID":"Account SID","settings.field.TWILIO_AUTH_TOKEN":"Auth Token","settings.field.TWILIO_FROM_NUMBER":"From Number","settings.field.DISABLE_RESTORE_RUNNING_STRATEGIES":"Disable Auto Restore","settings.field.STRATEGY_TICK_INTERVAL_SEC":"Tick Interval (sec)","settings.field.PRICE_CACHE_TTL_SEC":"Price Cache TTL (sec)","settings.field.PROXY_URL":"Full Proxy URL","settings.field.RATE_LIMIT":"Rate Limit (per min)","settings.field.ENABLE_CACHE":"Enable Cache","settings.field.ENABLE_REQUEST_LOG":"Enable Request Log","settings.field.ENABLE_AGENT_MEMORY":"Enable Agent Memory","settings.field.AGENT_MEMORY_ENABLE_VECTOR":"Enable Vector Retrieval (Local)","settings.field.AGENT_MEMORY_EMBEDDING_DIM":"Embedding Dimension","settings.field.AGENT_MEMORY_TOP_K":"Top-K Retrieval Count","settings.field.AGENT_MEMORY_CANDIDATE_LIMIT":"Candidate Window Size","settings.field.AGENT_MEMORY_HALF_LIFE_DAYS":"Time Decay Half-life (days)","settings.field.AGENT_MEMORY_W_SIM":"Similarity Weight","settings.field.AGENT_MEMORY_W_RECENCY":"Recency Weight","settings.field.AGENT_MEMORY_W_RETURNS":"Returns Weight","settings.field.ENABLE_REFLECTION_WORKER":"Enable Auto Verification","settings.field.REFLECTION_WORKER_INTERVAL_SEC":"Verification Interval (sec)","settings.field.OPENROUTER_API_KEY":"OpenRouter API Key","settings.field.OPENROUTER_API_URL":"OpenRouter API URL","settings.field.OPENROUTER_MODEL":"Default Model","settings.field.OPENROUTER_TEMPERATURE":"Temperature","settings.field.OPENROUTER_MAX_TOKENS":"Max Tokens","settings.field.OPENROUTER_TIMEOUT":"Timeout (sec)","settings.field.OPENROUTER_CONNECT_TIMEOUT":"Connect Timeout (sec)","settings.field.MARKET_TYPES_JSON":"Market Types JSON","settings.field.TRADING_SUPPORTED_SYMBOLS_JSON":"Supported Symbols JSON","settings.field.DATA_SOURCE_TIMEOUT":"Timeout (sec)","settings.field.DATA_SOURCE_RETRY":"Retry Count","settings.field.DATA_SOURCE_RETRY_BACKOFF":"Retry Backoff (sec)","settings.field.FINNHUB_API_KEY":"Finnhub API Key","settings.field.FINNHUB_TIMEOUT":"Finnhub Timeout (sec)","settings.field.FINNHUB_RATE_LIMIT":"Finnhub Rate Limit","settings.field.CCXT_DEFAULT_EXCHANGE":"CCXT Default Exchange","settings.field.CCXT_TIMEOUT":"CCXT Timeout (ms)","settings.field.CCXT_PROXY":"CCXT Proxy","settings.field.YFINANCE_TIMEOUT":"YFinance Timeout (sec)","settings.field.TIINGO_API_KEY":"Tiingo API Key","settings.field.TIINGO_TIMEOUT":"Tiingo Timeout (sec)","settings.field.SEARCH_PROVIDER":"Search Provider","settings.field.SEARCH_MAX_RESULTS":"Max Results","settings.field.TAVILY_API_KEYS":"Tavily API Keys","settings.field.SERPAPI_KEYS":"SerpAPI Keys","settings.field.SEARCH_GOOGLE_API_KEY":"Google API Key","settings.field.SEARCH_GOOGLE_CX":"Google CX","settings.field.SEARCH_BING_API_KEY":"Bing API Key","settings.field.INTERNAL_API_KEY":"Internal API Key","settings.desc.SEARCH_PROVIDER":"Web search provider for AI research","settings.desc.TAVILY_API_KEYS":"Tavily Search API keys, comma-separated for rotation. Free 1000 requests/month","settings.desc.SERPAPI_KEYS":"SerpAPI keys for Google/Bing search, comma-separated for rotation","settings.desc.ORDER_MODE":"maker: Limit order first (lower fees), market: Market order (instant fill)","settings.desc.MAKER_WAIT_SEC":"Wait time for limit order fill before switching to market order","settings.desc.MAKER_OFFSET_BPS":"Price offset in basis points. Buy: price*(1-offset), Sell: price*(1+offset)","settings.desc.TIINGO_API_KEY":"Tiingo API key for Forex/Metals data (free tier does not support 1-minute data)","settings.desc.TIINGO_TIMEOUT":"Tiingo API request timeout","portfolio.summary.totalValue":"Total Value","portfolio.summary.totalCost":"Total Cost","portfolio.summary.totalPnl":"Total P&L","portfolio.summary.positionCount":"Positions","portfolio.summary.profitLossRatio":"Profit/Loss","portfolio.summary.today":"Today","portfolio.summary.todayPnl":"Today P&L","portfolio.summary.bestPerformer":"Best Performer","portfolio.summary.worstPerformer":"Worst Performer","portfolio.summary.priceSync":"Price Sync","portfolio.summary.syncInterval":"Refresh","portfolio.summary.justNow":"Just now","portfolio.summary.ago":" ago","portfolio.positions.title":"My Positions","portfolio.positions.add":"Add Position","portfolio.positions.addFirst":"Add Your First Position","portfolio.positions.empty":"No positions yet","portfolio.positions.deleteConfirm":"Are you sure to delete this position?","portfolio.positions.currentPrice":"Current","portfolio.positions.entryPrice":"Entry","portfolio.positions.quantity":"Quantity","portfolio.positions.side":"Side","portfolio.positions.long":"Long","portfolio.positions.short":"Short","portfolio.positions.marketValue":"Value","portfolio.positions.pnl":"P&L","portfolio.positions.items":"positions","portfolio.monitors.title":"AI Monitors","portfolio.monitors.add":"Add Monitor","portfolio.monitors.addFirst":"Add AI Monitor","portfolio.monitors.empty":"No monitors yet","portfolio.monitors.deleteConfirm":"Are you sure to delete this monitor?","portfolio.monitors.interval":"Interval","portfolio.monitors.lastRun":"Last Run","portfolio.monitors.nextRun":"Next Run","portfolio.monitors.channels":"Channels","portfolio.monitors.runNow":"Run Now","portfolio.monitors.analysisResult":"AI Analysis Result","portfolio.monitors.runningTitle":"AI Analysis Started","portfolio.monitors.runningDesc":"Analysis is running in background. Results will be pushed via notification. Analyzing multiple positions may take a few minutes.","portfolio.monitors.timeoutTitle":"Request Timeout","portfolio.monitors.timeoutDesc":"Analysis may still be running in background. Please check notifications for results later. If no notification is received, please try again.","portfolio.modal.addPosition":"Add Position","portfolio.modal.editPosition":"Edit Position","portfolio.modal.addMonitor":"Add Monitor","portfolio.modal.editMonitor":"Edit Monitor","portfolio.form.market":"Market","portfolio.form.marketRequired":"Please select a market","portfolio.form.selectMarket":"Select Market","portfolio.form.symbol":"Symbol","portfolio.form.symbolRequired":"Please enter symbol","portfolio.form.searchSymbol":"Search or enter symbol","portfolio.form.useAsSymbol":"Use","portfolio.form.asSymbolCode":"as symbol code","portfolio.form.symbolHint":"Search symbols or enter any code directly","portfolio.form.side":"Side","portfolio.form.quantity":"Quantity","portfolio.form.quantityRequired":"Please enter quantity","portfolio.form.enterQuantity":"Enter quantity","portfolio.form.entryPrice":"Entry Price","portfolio.form.entryPriceRequired":"Please enter entry price","portfolio.form.enterEntryPrice":"Enter entry price","portfolio.form.notes":"Notes","portfolio.form.enterNotes":"Optional: Add notes","portfolio.form.monitorName":"Monitor Name","portfolio.form.monitorNameRequired":"Please enter monitor name","portfolio.form.enterMonitorName":"e.g. Daily Portfolio Analysis","portfolio.form.interval":"Interval","portfolio.form.minutes":"minutes","portfolio.form.hour":"hour","portfolio.form.hours":"hours","portfolio.form.notifyChannels":"Notify Channels","portfolio.form.browser":"Browser","portfolio.form.email":"Email","portfolio.form.telegramChatId":"Telegram Chat ID","portfolio.form.enterTelegramChatId":"Enter Telegram Chat ID","portfolio.form.telegramRequired":"Please enter Telegram Chat ID","portfolio.form.emailAddress":"Email Address","portfolio.form.enterEmail":"Enter email address","portfolio.form.emailRequired":"Please enter email address","portfolio.form.emailInvalid":"Please enter a valid email address","portfolio.form.customPrompt":"Custom Prompt","portfolio.form.customPromptPlaceholder":'Optional: Add focus areas, e.g. "Focus on tech stock risks"',"portfolio.form.monitorScope":"Monitor Scope","portfolio.form.allPositions":"All Positions","portfolio.form.selectedPositions":"Selected Positions","portfolio.form.selectPositions":"Select Positions","portfolio.form.selectAll":"Select All","portfolio.form.deselectAll":"Deselect All","portfolio.form.selectedCount":"{count} of {total} selected","portfolio.form.pleaseSelectPositions":"Please select at least one position to monitor","portfolio.form.notificationFromProfile":"Notifications will be sent to addresses configured in your profile","portfolio.form.goToProfile":"Go to settings","portfolio.message.loadFailed":"Failed to load data","portfolio.message.saveSuccess":"Saved successfully","portfolio.message.saveFailed":"Failed to save","portfolio.message.deleteSuccess":"Deleted successfully","portfolio.message.deleteFailed":"Failed to delete","portfolio.message.updateFailed":"Failed to update","portfolio.message.monitorEnabled":"Monitor enabled","portfolio.message.monitorDisabled":"Monitor paused","portfolio.message.monitorRunSuccess":"Analysis completed","portfolio.message.monitorRunFailed":"Analysis failed","portfolio.message.monitorRunning":"AI analysis started, please wait for notification","portfolio.groups.all":"All Positions","portfolio.groups.ungrouped":"Ungrouped","portfolio.form.group":"Group","portfolio.form.enterGroup":"Enter or select group","portfolio.alerts.title":"Price/PnL Alerts","portfolio.alerts.addAlert":"Add Alert","portfolio.alerts.editAlert":"Edit Alert","portfolio.alerts.alertType":"Alert Type","portfolio.alerts.priceAbove":"Price Above","portfolio.alerts.priceBelow":"Price Below","portfolio.alerts.pnlAbove":"Profit Above (%)","portfolio.alerts.pnlBelow":"Loss Below (%)","portfolio.alerts.threshold":"Threshold","portfolio.alerts.thresholdRequired":"Please enter threshold","portfolio.alerts.enterPrice":"Enter price","portfolio.alerts.enterPercent":"Enter percentage","portfolio.alerts.currentPrice":"Current Price","portfolio.alerts.currentPriceHint":"Current price","portfolio.alerts.repeatInterval":"Repeat Alert","portfolio.alerts.noRepeat":"No repeat (trigger once)","portfolio.alerts.every5min":"Every 5 minutes","portfolio.alerts.every15min":"Every 15 minutes","portfolio.alerts.every30min":"Every 30 minutes","portfolio.alerts.every1hour":"Every 1 hour","portfolio.alerts.every4hours":"Every 4 hours","portfolio.alerts.onceDaily":"Once daily","portfolio.alerts.enabled":"Enable Alert","portfolio.alerts.enabledDesc":"Auto-monitor and trigger notifications","portfolio.alerts.delete":"Delete","portfolio.alerts.deleteConfirm":"Are you sure you want to delete this alert?","portfolio.modal.addAlert":"Add Alert","portfolio.modal.editAlert":"Edit Alert","menu.userManage":"User Management","menu.myProfile":"My Profile","common.actions":"Actions","common.refresh":"Refresh","userManage.title":"User Management","userManage.searchPlaceholder":"Search by username/email/nickname","userManage.description":"Manage system users, roles and permissions","userManage.createUser":"Create User","userManage.editUser":"Edit User","userManage.username":"Username","userManage.password":"Password","userManage.nickname":"Nickname","userManage.email":"Email","userManage.role":"Role","userManage.status":"Status","userManage.lastLogin":"Last Login","userManage.active":"Active","userManage.disabled":"Disabled","userManage.neverLogin":"Never","userManage.usernameRequired":"Please enter username","userManage.usernamePlaceholder":"Enter username","userManage.passwordRequired":"Please enter password","userManage.passwordPlaceholder":"Enter password (min 6 chars)","userManage.passwordMin":"Password must be at least 6 characters","userManage.nicknamePlaceholder":"Enter nickname","userManage.emailPlaceholder":"Enter email","userManage.emailInvalid":"Invalid email format","userManage.rolePlaceholder":"Select role","userManage.statusPlaceholder":"Select status","userManage.resetPassword":"Reset Password","userManage.resetPasswordWarning":"This will reset the user's password","userManage.newPassword":"New Password","userManage.newPasswordPlaceholder":"Enter new password","userManage.confirmDelete":"Are you sure to delete this user?","userManage.roleAdmin":"Admin","userManage.roleManager":"Manager","userManage.roleUser":"User","userManage.roleViewer":"Viewer","profile.title":"My Profile","profile.description":"Manage your account settings and preferences","profile.basicInfo":"Basic Info","profile.changePassword":"Change Password","profile.username":"Username","profile.nickname":"Nickname","profile.email":"Email","profile.lastLogin":"Last Login","profile.nicknamePlaceholder":"Enter your nickname","profile.emailPlaceholder":"Enter your email","profile.emailInvalid":"Invalid email format","profile.emailCannotChange":"Email cannot be changed after registration","profile.passwordHint":"Password must be at least 6 characters","profile.oldPassword":"Current Password","profile.newPassword":"New Password","profile.confirmPassword":"Confirm Password","profile.oldPasswordRequired":"Please enter current password","profile.oldPasswordPlaceholder":"Enter current password","profile.newPasswordRequired":"Please enter new password","profile.newPasswordPlaceholder":"Enter new password","profile.confirmPasswordRequired":"Please confirm password","profile.confirmPasswordPlaceholder":"Confirm new password","profile.passwordMin":"Password must be at least 6 characters","profile.passwordMismatch":"Passwords do not match","profile.credits.title":"My Credits","profile.credits.unit":"Credits","profile.credits.recharge":"Top Up","profile.credits.vipExpires":"VIP expires on","profile.credits.vipExpired":"VIP expired","profile.credits.noVip":"Not a VIP","profile.credits.hint":"AI analysis/backtest/monitoring will consume credits; VIP only makes VIP-free indicators free to use.","profile.creditsLog":"Credits History","profile.creditsLog.time":"Time","profile.creditsLog.action":"Type","profile.creditsLog.amount":"Change","profile.creditsLog.balance":"Balance","profile.creditsLog.remark":"Remark","profile.creditsLog.actionConsume":"Consume","profile.creditsLog.actionRecharge":"Recharge","profile.creditsLog.actionAdjust":"Adjust","profile.creditsLog.actionRefund":"Refund","profile.creditsLog.actionVipGrant":"VIP Grant","profile.creditsLog.actionVipRevoke":"VIP Revoke","profile.creditsLog.actionRegisterBonus":"Register Bonus","profile.creditsLog.actionReferralBonus":"Referral Bonus","profile.creditsLog.actionIndicatorPurchase":"Indicator Purchase","profile.creditsLog.actionIndicatorSale":"Indicator Sale","profile.referral.title":"Invite Friends","profile.referral.listTab":"Referrals","profile.referral.totalInvited":"Invited","profile.referral.bonusPerInvite":"Per Invite","profile.referral.yourLink":"Your Referral Link","profile.referral.copyLink":"Copy Link","profile.referral.linkCopied":"Referral link copied","profile.referral.newUserBonus":"New users get","profile.referral.user":"User","profile.referral.registerTime":"Registered","profile.referral.noReferrals":"No referrals yet","profile.referral.shareNow":"Share Now","profile.notifications.title":"Notification Settings","profile.notifications.hint":"Configure your default notification methods, which will be used automatically when creating asset monitors and alerts","profile.notifications.defaultChannels":"Default Notification Channels","profile.notifications.browser":"In-App Notification","profile.notifications.email":"Email","profile.notifications.phone":"SMS","profile.notifications.telegramBotToken":"Telegram Bot Token","profile.notifications.telegramBotTokenPlaceholder":"Enter your Telegram Bot Token","profile.notifications.telegramBotTokenHint":"Get Token by creating a bot via @BotFather","profile.notifications.telegramChatId":"Telegram Chat ID","profile.notifications.telegramPlaceholder":"Enter your Telegram Chat ID (e.g. 123456789)","profile.notifications.telegramHint":"Send /start to @userinfobot to get your Chat ID","profile.notifications.notifyEmail":"Notification Email","profile.notifications.emailPlaceholder":"Email address to receive notifications","profile.notifications.emailHint":"Uses your account email by default, or set a different one","profile.notifications.phonePlaceholder":"Enter phone number (e.g. +1234567890)","profile.notifications.phoneHint":"Requires admin to configure Twilio service","profile.notifications.discordWebhook":"Discord Webhook","profile.notifications.discordPlaceholder":"https://discord.com/api/webhooks/...","profile.notifications.discordHint":"Create Webhook in Discord server settings","profile.notifications.webhookUrl":"Webhook URL","profile.notifications.webhookPlaceholder":"https://your-server.com/webhook","profile.notifications.webhookHint":"Custom Webhook URL, notifications sent via POST JSON","profile.notifications.webhookToken":"Webhook Token (Optional)","profile.notifications.webhookTokenPlaceholder":"Bearer Token for request authentication","profile.notifications.webhookTokenHint":"Sent as Authorization: Bearer Token to Webhook","profile.notifications.testBtn":"Send Test Notification","profile.notifications.saveSuccess":"Notification settings saved successfully","profile.notifications.selectChannel":"Please select at least one notification channel","profile.notifications.fillTelegramToken":"Please fill in Telegram Bot Token","profile.notifications.fillTelegram":"Please fill in Telegram Chat ID","profile.notifications.fillEmail":"Please fill in notification email","profile.notifications.testSent":"Test notification sent, please check your notification channels","userManage.credits":"Credits","userManage.adjustCredits":"Adjust Credits","userManage.setVip":"Set VIP","userManage.currentCredits":"Current Credits","userManage.newCredits":"New Credits","userManage.enterCredits":"Enter new credits amount","userManage.creditsNonNegative":"Credits cannot be negative","userManage.currentVip":"Current VIP Status","userManage.vipActive":"Active","userManage.vipExpired":"Expired","userManage.vipDays":"VIP Days","userManage.vipExpiresAt":"VIP Expires At","userManage.cancelVip":"Cancel VIP","userManage.days":"days","userManage.customDate":"Custom Date","userManage.selectDate":"Please select a date","userManage.remark":"Remark","userManage.remarkPlaceholder":"Optional remark","userManage.tabUsers":"User Management","systemOverview.tabTitle":"System Overview","systemOverview.totalStrategies":"Total Strategies","systemOverview.runningStrategies":"Running","systemOverview.totalCapital":"Total Capital","systemOverview.totalPnl":"Total PnL","systemOverview.filterAll":"All Status","systemOverview.filterRunning":"Running","systemOverview.filterStopped":"Stopped","systemOverview.searchPlaceholder":"Search strategy/symbol/user","systemOverview.running":"Running","systemOverview.stopped":"Stopped","systemOverview.colUser":"User","systemOverview.colStrategy":"Strategy","systemOverview.colStatus":"Status","systemOverview.colSymbol":"Symbol","systemOverview.colCapital":"Capital","systemOverview.colPnl":"PnL / ROI","systemOverview.colPositions":"Pos","systemOverview.colTrades":"Trades","systemOverview.colIndicator":"Indicator","systemOverview.colExchange":"Exchange","systemOverview.colTimeframe":"TF","systemOverview.colLeverage":"Lev","systemOverview.colCreatedAt":"Created","systemOverview.realized":"Real","systemOverview.unrealized":"Unreal","systemOverview.symbols":"symbols","systemOverview.live":"Live","systemOverview.signal":"Signal Only","settings.group.billing":"Billing & Credits","settings.field.BILLING_ENABLED":"Enable Billing","settings.field.BILLING_COST_AI_ANALYSIS":"AI Analysis Cost","settings.field.BILLING_COST_STRATEGY_RUN":"Strategy Run Cost","settings.field.BILLING_COST_BACKTEST":"Backtest Cost","settings.field.BILLING_COST_PORTFOLIO_MONITOR":"Portfolio Monitor Cost","settings.field.CREDITS_REGISTER_BONUS":"Register Bonus","settings.field.CREDITS_REFERRAL_BONUS":"Referral Bonus","settings.field.RECHARGE_TELEGRAM_URL":"Recharge Telegram URL","settings.field.MEMBERSHIP_MONTHLY_PRICE_USD":"Monthly Membership Price (USD)","settings.field.MEMBERSHIP_MONTHLY_CREDITS":"Monthly Membership Bonus Credits","settings.field.MEMBERSHIP_YEARLY_PRICE_USD":"Yearly Membership Price (USD)","settings.field.MEMBERSHIP_YEARLY_CREDITS":"Yearly Membership Bonus Credits","settings.field.MEMBERSHIP_LIFETIME_PRICE_USD":"Lifetime Membership Price (USD)","settings.field.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"Lifetime Monthly Credits","settings.field.USDT_PAY_ENABLED":"Enable USDT Pay","settings.field.USDT_PAY_CHAIN":"USDT Chain","settings.field.USDT_TRC20_XPUB":"TRC20 XPUB (Watch-only)","settings.field.USDT_TRC20_CONTRACT":"USDT TRC20 Contract","settings.field.TRONGRID_BASE_URL":"TronGrid Base URL","settings.field.TRONGRID_API_KEY":"TronGrid API Key","settings.field.USDT_PAY_CONFIRM_SECONDS":"Confirm Delay (sec)","settings.field.USDT_PAY_EXPIRE_MINUTES":"Order Expire (min)","settings.desc.BILLING_ENABLED":"Enable billing system. Users need credits to use certain features when enabled","settings.desc.BILLING_COST_AI_ANALYSIS":"Credits consumed per AI analysis request","settings.desc.BILLING_COST_STRATEGY_RUN":"Credits consumed when starting a strategy","settings.desc.BILLING_COST_BACKTEST":"Credits consumed per backtest run","settings.desc.BILLING_COST_PORTFOLIO_MONITOR":"Credits consumed per portfolio AI monitoring run","settings.desc.CREDITS_REGISTER_BONUS":"Credits awarded to new users on registration","settings.desc.CREDITS_REFERRAL_BONUS":"Credits awarded to referrer when someone signs up with their referral code","settings.desc.VERIFICATION_CODE_MAX_ATTEMPTS":"Maximum attempts to verify a code before lockout","settings.desc.VERIFICATION_CODE_LOCK_MINUTES":"Lockout duration after exceeding max attempts","settings.desc.RECHARGE_TELEGRAM_URL":"Telegram customer service URL for recharge inquiries","settings.desc.MEMBERSHIP_MONTHLY_PRICE_USD":"Monthly membership price in USD (mock payment in current version).","settings.desc.MEMBERSHIP_MONTHLY_CREDITS":"Credits granted immediately after purchasing monthly membership.","settings.desc.MEMBERSHIP_YEARLY_PRICE_USD":"Yearly membership price in USD (mock payment in current version).","settings.desc.MEMBERSHIP_YEARLY_CREDITS":"Credits granted immediately after purchasing yearly membership.","settings.desc.MEMBERSHIP_LIFETIME_PRICE_USD":"Lifetime membership price in USD (mock payment in current version).","settings.desc.MEMBERSHIP_LIFETIME_MONTHLY_CREDITS":"Credits granted every 30 days for lifetime members (first grant happens immediately on purchase).","settings.desc.USDT_PAY_ENABLED":"Enable USDT scan-to-pay flow (per-order unique address + auto reconciliation).","settings.desc.USDT_PAY_CHAIN":"Currently only TRC20 is supported.","settings.desc.USDT_TRC20_XPUB":"Watch-only xpub used to derive per-order deposit addresses. Do NOT paste private key/seed.","settings.desc.USDT_TRC20_CONTRACT":"USDT contract address on TRON (default prefilled).","settings.desc.TRONGRID_BASE_URL":"TronGrid API base URL (default is fine).","settings.desc.TRONGRID_API_KEY":"Optional. For higher TronGrid rate limits and stability.","settings.desc.USDT_PAY_CONFIRM_SECONDS":"After a payment is detected, wait N seconds before marking it confirmed.","settings.desc.USDT_PAY_EXPIRE_MINUTES":"Order expiration time; users need to regenerate an order after it expires.","globalMarket.title":"Global Market Dashboard","globalMarket.fearGreedShort":"F&G","globalMarket.calendar":"Calendar","globalMarket.lastUpdate":"Last Update","globalMarket.refresh":"Refresh","globalMarket.name":"Name","globalMarket.price":"Price","globalMarket.change":"Change","globalMarket.trend":"Trend","globalMarket.pair":"Pair","globalMarket.unit":"Unit","globalMarket.refreshSuccess":"Data refreshed successfully","globalMarket.refreshError":"Failed to refresh data","globalMarket.fetchError":"Failed to fetch data","globalMarket.loading":"Loading...","globalMarket.fearGreedIndex":"Fear & Greed Index","globalMarket.fearGreedTip":"Fear & Greed Index measures market sentiment, 0 = Extreme Fear, 100 = Extreme Greed","globalMarket.volatilityIndex":"Volatility Index","globalMarket.dollarIndex":"Dollar Index","globalMarket.majorIndices":"Major Indices","globalMarket.vixTitle":"VIX Volatility Index","globalMarket.vixTip":"VIX measures expected market volatility, higher values indicate more market fear","globalMarket.extremeFear":"Extreme Fear","globalMarket.fear":"Fear","globalMarket.neutral":"Neutral","globalMarket.greed":"Greed","globalMarket.extremeGreed":"Extreme Greed","globalMarket.marketOverview":"Market Overview","globalMarket.indices":"Indices","globalMarket.forex":"Forex","globalMarket.crypto":"Crypto","globalMarket.commodities":"Commodities","globalMarket.heatmap":"Market Heatmap","globalMarket.cryptoHeatmap":"Crypto","globalMarket.commoditiesHeatmap":"Commodities","globalMarket.sectorHeatmap":"Sectors","globalMarket.forexHeatmap":"Forex","globalMarket.opportunities":"Trading Opportunities","globalMarket.noOpportunities":"No significant opportunities detected","globalMarket.financialNews":"Financial News","globalMarket.noNews":"No news available","globalMarket.economicCalendar":"Economic Calendar","globalMarket.noEvents":"No events scheduled","globalMarket.actual":"Actual","globalMarket.forecast":"Forecast","globalMarket.previous":"Previous","globalMarket.signal.bullish":"Bullish Momentum","globalMarket.signal.bearish":"Bearish Momentum","globalMarket.signal.overbought":"Overbought Warning","globalMarket.signal.oversold":"Oversold Opportunity","globalMarket.worldMap":"Global Markets Map","globalMarket.rising":"Rising","globalMarket.falling":"Falling","globalMarket.bullish":"Bullish","globalMarket.bearish":"Bearish","globalMarket.expectedImpact":"Expected Impact","globalMarket.aboveForecast":"Above Forecast","globalMarket.belowForecast":"Below Forecast","globalMarket.upcomingEvents":"Upcoming Events","globalMarket.releasedEvents":"Released Data","trading-assistant.form.notificationFromProfile":"Notifications will be sent to the address configured in your profile.","trading-assistant.form.notificationConfigMissing":"You have not configured parameters for selected channels ({channels}). Please go to your profile to configure them.","trading-assistant.form.goToProfile":"Go to Profile","community.title":"Indicator Market","community.searchPlaceholder":"Search indicators...","community.all":"All","community.freeOnly":"Free","community.paidOnly":"Paid","community.sortNewest":"Newest","community.sortHot":"Popular","community.sortRating":"Top Rated","community.sortPriceLow":"Price: Low to High","community.sortPriceHigh":"Price: High to Low","community.myPurchases":"My Purchases","community.noIndicators":"No indicators yet","community.createFirst":"Create Your First Indicator","community.total":"Total","community.items":"items","community.free":"Free","community.credits":"Credits","community.myIndicator":"My Indicator","community.purchased":"Purchased","community.noDescription":"No description","community.loadFailed":"Failed to load","community.publishedAt":"Published","community.downloads":"Downloads","community.rating":"Rating","community.views":"Views","community.description":"Description","community.performance":"Live Performance","community.strategyCount":"Strategies","community.tradeCount":"Trades","community.winRate":"Win Rate","community.totalProfit":"Total Profit","community.reviews":"Reviews","community.useNow":"Use Now","community.getFree":"Get Free","community.buyNow":"Buy Now","community.purchaseSuccess":"Purchase successful! Indicator added to your list","community.purchaseFailed":"Purchase failed","community.indicator_not_found":"Indicator not found or unavailable","community.cannot_buy_own":"Cannot buy your own indicator","community.already_purchased":"You have already purchased this indicator","community.insufficient_credits":"Insufficient credits","community.commentSuccess":"Comment submitted","community.commentFailed":"Failed to submit comment","community.commentUpdateSuccess":"Comment updated successfully","community.commentUpdateFailed":"Failed to update comment","community.editComment":"Edit Comment","community.cancelEdit":"Cancel","community.updateComment":"Update Comment","community.alreadyCommented":"You have already reviewed this indicator","community.editMyComment":"Edit Review","community.me":"Me","community.edited":"edited","community.not_purchased":"Please purchase/get the indicator first to leave a review","community.cannot_comment_own":"Cannot review your own indicator","community.already_commented":"You have already reviewed this indicator","community.noComments":"No reviews yet","community.yourRating":"Your Rating","community.commentPlaceholder":"Share your experience...","community.submitComment":"Submit Review","community.pleaseRate":"Please select a rating","community.loadMore":"Load More","community.justNow":"Just now","community.minutesAgo":"minutes ago","community.hoursAgo":"hours ago","community.daysAgo":"days ago","community.noPurchases":"No purchases yet","community.purchasedFrom":"Seller","community.purchaseTime":"Purchase Time","community.admin.reviewTab":"Review","community.admin.pending":"Pending","community.admin.approved":"Approved","community.admin.rejected":"Rejected","community.admin.noItems":"No items","community.admin.noDescription":"No description","community.admin.viewCode":"View Code","community.admin.note":"Note","community.admin.approve":"Approve","community.admin.reject":"Reject","community.admin.unpublish":"Unpublish","community.admin.delete":"Delete","community.admin.deleteConfirm":"Are you sure to delete this indicator? This cannot be undone.","community.admin.unpublishConfirm":"Are you sure to unpublish this indicator?","community.admin.unpublishHint":"This indicator will be hidden from the market","community.admin.confirm":"Confirm","community.admin.cancel":"Cancel","community.admin.approveTitle":"Approve Indicator","community.admin.rejectTitle":"Reject Indicator","community.admin.noteLabel":"Note (optional)","community.admin.notePlaceholder":"Enter review note...","community.admin.loadFailed":"Failed to load","community.admin.reviewSuccess":"Review submitted","community.admin.reviewFailed":"Review failed","community.admin.unpublishSuccess":"Unpublished successfully","community.admin.unpublishFailed":"Failed to unpublish","community.admin.deleteSuccess":"Deleted successfully","community.admin.deleteFailed":"Failed to delete","fastAnalysis.aiAnalysis":"AI Analysis","fastAnalysis.analyzing":"AI is analyzing...","fastAnalysis.pleaseWait":"Please wait, fetching real-time data and generating professional report","fastAnalysis.error":"Analysis Failed","fastAnalysis.retry":"Retry","fastAnalysis.selectSymbol":"Select a symbol to start","fastAnalysis.selectHint":"Choose from your watchlist or add a new symbol","fastAnalysis.confidence":"Confidence","fastAnalysis.currentPrice":"Current Price","fastAnalysis.entryPrice":"Entry Price","fastAnalysis.stopLoss":"Stop Loss","fastAnalysis.takeProfit":"Take Profit","fastAnalysis.stopLossHint":"Based on 2x ATR & support","fastAnalysis.takeProfitHint":"Based on 3x ATR & resistance","fastAnalysis.atrBased":"ATR-based","fastAnalysis.riskReward":"Risk/Reward","fastAnalysis.technical":"Technical","fastAnalysis.fundamental":"Fundamental","fastAnalysis.sentiment":"Sentiment","fastAnalysis.overall":"Overall","fastAnalysis.keyReasons":"Key Reasons","fastAnalysis.risks":"Risks","fastAnalysis.indicators":"Technical Indicators","fastAnalysis.maTrend":"MA Trend","fastAnalysis.support":"Support","fastAnalysis.resistance":"Resistance","fastAnalysis.volatility":"Volatility","fastAnalysis.wasHelpful":"Was this analysis helpful?","fastAnalysis.helpful":"Helpful","fastAnalysis.notHelpful":"Not Helpful","fastAnalysis.feedbackThanks":"Thanks for your feedback!","fastAnalysis.feedbackFailed":"Failed to submit feedback","fastAnalysis.feedbackUnavailable":"Feedback unavailable, please re-analyze","fastAnalysis.analysisTime":"Analysis time","fastAnalysis.startAnalysis":"Analyze","fastAnalysis.history":"History","fastAnalysis.systemTitle":"QUANTDINGER AI","fastAnalysis.systemOnline":"Online","fastAnalysis.version":"Fast","fastAnalysis.preparing":"Preparing...","fastAnalysis.step1":"Fetching real-time data","fastAnalysis.step2":"Calculating indicators","fastAnalysis.step3":"AI deep analysis","fastAnalysis.step4":"Generating report","fastAnalysis.technicalAnalysis":"Technical Analysis","fastAnalysis.fundamentalAnalysis":"Fundamental Analysis","fastAnalysis.sentimentAnalysis":"Market Sentiment","fastAnalysis.signal.bullish":"Bullish","fastAnalysis.signal.bearish":"Bearish","fastAnalysis.signal.neutral":"Neutral","fastAnalysis.signal.overbought":"Overbought","fastAnalysis.signal.oversold":"Oversold","fastAnalysis.signal.strong_bullish":"Strong Bullish","fastAnalysis.signal.strong_bearish":"Strong Bearish","fastAnalysis.trend.uptrend":"Uptrend","fastAnalysis.trend.downtrend":"Downtrend","fastAnalysis.trend.sideways":"Sideways","fastAnalysis.trend.consolidating":"Consolidating","fastAnalysis.trend.golden_cross":"Golden Cross","fastAnalysis.trend.death_cross":"Death Cross","fastAnalysis.trend.strong_uptrend":"Strong Uptrend","fastAnalysis.trend.strong_downtrend":"Strong Downtrend","fastAnalysis.volatilityLevel.high":"High","fastAnalysis.volatilityLevel.medium":"Medium","fastAnalysis.volatilityLevel.low":"Low","fastAnalysis.volatilityLevel.unknown":"Unknown","fastAnalysis.marketOverview":"Market Overview","fastAnalysis.selectTip":"Select a symbol from your watchlist to start AI analysis","fastAnalysis.analysisInProgress":"An analysis is already running for this symbol. Please wait and try again.","fastAnalysis.analysisInProgressTitle":"Analysis in progress","fastAnalysis.insufficientCredits":"Insufficient credits","fastAnalysis.insufficientCreditsDetail":"Insufficient credits: need {required}, you have {current}, short by {shortage}.","fastAnalysis.analysisCompleteWithCredits":"Analysis complete. Remaining credits: {remaining}","fastAnalysis.consensusTitle":"Multi-timeframe consensus","fastAnalysis.consensusDecision":"Consensus","fastAnalysis.consensusScore":"Composite score","fastAnalysis.consensusAgreement":"Timeframe agreement","aiQuant.title":"AI Quant","aiQuant.strategyList":"Strategies","aiQuant.create":"Create","aiQuant.edit":"Edit","aiQuant.delete":"Delete","aiQuant.start":"Start","aiQuant.stop":"Stop","aiQuant.analyze":"Analyze Now","aiQuant.noStrategy":"No strategies yet, click to create","aiQuant.selectStrategy":"Select a strategy from the left","aiQuant.createFirst":"Create Your First Strategy","aiQuant.createStrategy":"Create Strategy","aiQuant.editStrategy":"Edit Strategy","aiQuant.confirmDelete":"Are you sure you want to delete this strategy?","aiQuant.latestAnalysis":"Latest Analysis","aiQuant.analysisHistory":"Analysis History","aiQuant.decision":"Decision","aiQuant.confidence":"Confidence","aiQuant.currentPrice":"Current Price","aiQuant.entryPrice":"Entry Price","aiQuant.stopLoss":"Stop Loss","aiQuant.takeProfit":"Take Profit","aiQuant.reason":"Reason","aiQuant.analyzedAt":"Analyzed At","aiQuant.tradeSettings":"Trade Settings","aiQuant.minutes":"min","aiQuant.hour":"hour","aiQuant.hours":"hours","aiQuant.stats.totalStrategies":"Total Strategies","aiQuant.stats.runningStrategies":"Running","aiQuant.stats.totalAnalyses":"Analyses","aiQuant.stats.totalPnl":"Total PnL","aiQuant.status.running":"Running","aiQuant.status.stopped":"Stopped","aiQuant.status.paused":"Paused","aiQuant.executionMode.signal":"Signal Only","aiQuant.executionMode.live":"Live Trading","aiQuant.marketType.spot":"Spot","aiQuant.marketType.futures":"Futures","aiQuant.field.strategyName":"Strategy Name","aiQuant.field.market":"Market","aiQuant.field.symbol":"Symbol","aiQuant.field.marketType":"Market Type","aiQuant.field.aiModel":"AI Model","aiQuant.field.interval":"Analysis Interval","aiQuant.field.aiPrompt":"AI Prompt","aiQuant.field.executionMode":"Execution Mode","aiQuant.field.positionSize":"Position Size","aiQuant.field.stopLoss":"Stop Loss %","aiQuant.field.takeProfit":"Take Profit %","aiQuant.field.totalAnalyses":"Total Analyses","aiQuant.field.totalTrades":"Total Trades","aiQuant.field.totalPnl":"Total PnL","aiQuant.placeholder.strategyName":"Enter strategy name","aiQuant.placeholder.market":"Select market","aiQuant.placeholder.symbol":"e.g., BTC/USDT","aiQuant.placeholder.aiModel":"Use system default","aiQuant.placeholder.aiPrompt":"Enter your trading strategy prompt, e.g., Buy when RSI is below 30...","aiQuant.validation.strategyName":"Please enter strategy name","aiQuant.validation.market":"Please select market","aiQuant.validation.symbol":"Please enter symbol","aiQuant.table.decision":"Decision","aiQuant.table.confidence":"Confidence","aiQuant.table.entryPrice":"Entry","aiQuant.table.stopLoss":"Stop Loss","aiQuant.table.takeProfit":"Take Profit","aiQuant.table.time":"Time","aiQuant.msg.createSuccess":"Strategy created successfully","aiQuant.msg.updateSuccess":"Strategy updated successfully","aiQuant.msg.deleteSuccess":"Strategy deleted successfully","aiQuant.msg.startSuccess":"Strategy started","aiQuant.msg.stopSuccess":"Strategy stopped","aiQuant.msg.analyzeSuccess":"Analysis completed","aiQuant.field.initialCapital":"Initial Capital","aiQuant.field.leverage":"Leverage","aiQuant.field.tradeDirection":"Trade Direction","aiQuant.field.trailingStop":"Trailing Stop","aiQuant.field.trailingStopPct":"Trailing Stop %","aiQuant.direction.long":"Long Only","aiQuant.direction.short":"Short Only","aiQuant.direction.both":"Both","aiQuant.riskControl":"Risk Control","aiQuant.aiSettings":"AI Settings","aiQuant.systemDefault":"System Default","aiQuant.placeholder.selectSymbol":"Select from watchlist","aiQuant.hint.symbolFromWatchlist":"Select from your watchlist, market type is auto-detected","aiQuant.hint.spotLeverageFixed":"Spot market leverage is fixed at 1x","aiQuant.hint.stopLossEnforced":"Enforced stop loss, AI cannot modify","aiQuant.hint.takeProfitEnforced":"Enforced take profit, AI cannot modify","aiQuant.hint.aiPromptOnly":"AI only determines direction based on prompt, will not modify your risk settings","aiQuant.aiLimitWarning":"AI Permission Restricted","aiQuant.aiLimitDescription":"AI can ONLY determine trade direction (BUY/SELL/HOLD). Leverage, position size, stop loss/take profit are fully controlled by you and CANNOT be modified by AI.","aiQuant.userStopLoss":"Your Stop Loss","aiQuant.userTakeProfit":"Your Take Profit","aiQuant.userLeverage":"Your Leverage","aiQuant.validation.initialCapital":"Please enter initial capital","aiQuant.table.currentPrice":"Current Price","aiQuant.field.promptTemplate":"Strategy Template","aiQuant.placeholder.selectTemplate":"Select a preset template","aiQuant.template.default":"📊 Comprehensive Analysis (Recommended)","aiQuant.template.trend":"📈 Trend Following","aiQuant.template.swing":"🔄 Swing Trading","aiQuant.template.news":"📰 News Driven","aiQuant.template.custom":"✏️ Custom","aiQuant.hint.dataProvided":"System auto-provides: real-time price, indicators (RSI/MACD/MA), recent news, macro data. AI analyzes these with your prompt to determine direction.","aiQuant.hint.liveWarning":"Live mode will trade with REAL money! Make sure you have configured exchange API and understand the risks!","trading-assistant.liveDisclaimer.title":"Live Trading Disclaimer","trading-assistant.liveDisclaimer.content":"Live trading involves significant risk and may result in partial or total loss of funds. The platform does not guarantee returns or profits. You are responsible for your own decisions and outcomes.","trading-assistant.liveDisclaimer.agree":"I have read and understood the disclaimer and still want to enable live trading","trading-assistant.liveDisclaimer.required":"Please accept the disclaimer before enabling live trading","trading-assistant.liveDisclaimer.blockTitle":"Please accept the disclaimer first","trading-assistant.liveDisclaimer.blockDesc":"You must accept the disclaimer to configure live trading connection and order settings.","menu.billing":"Membership","billing.title":"Membership / Credits","billing.desc":"Choose a plan to activate VIP and receive bonus credits.","billing.snapshot.credits":"Current Credits","billing.snapshot.vip":"VIP Status","billing.snapshot.notVip":"Not VIP","billing.snapshot.expires":"Expires","billing.vipRule.title":"VIP Benefit","billing.vipRule.desc":"VIP has only one special permission: VIP-free indicators can be used without credits deduction. Other paid features/indicators still consume credits.","billing.plan.monthly":"Monthly","billing.plan.yearly":"Yearly","billing.plan.lifetime":"Lifetime","billing.perMonth":"month","billing.perYear":"year","billing.once":"one-time","billing.credits":"Credits","billing.lifetimeMonthly":"Monthly bonus","billing.buyNow":"Buy Now","billing.purchaseSuccess":"Purchase successful","billing.purchaseFailed":"Purchase failed","billing.usdt.title":"USDT Scan to Pay","billing.usdt.hintTitle":"Scan with your wallet and send USDT","billing.usdt.hintDesc":"Make sure the network and amount are correct (TRC20 only for now). Membership will be activated automatically after payment is confirmed.","billing.usdt.chain":"Chain","billing.usdt.amount":"Amount","billing.usdt.address":"Deposit Address","billing.usdt.copyAddress":"Copy Address","billing.usdt.copyAmount":"Copy Amount","billing.usdt.refresh":"Refresh","billing.usdt.expires":"Expires","billing.usdt.paidSuccess":"Payment confirmed. Membership activated.","billing.usdt.status.pending":"Waiting for payment","billing.usdt.status.paid":"Payment detected","billing.usdt.status.confirmed":"Confirmed","billing.usdt.status.expired":"Expired","billing.usdt.status.cancelled":"Cancelled","billing.usdt.status.failed":"Failed","billing.usdt.expiredHint":"Order expired. If you already paid, please contact support with your TxHash and payment screenshot.","billing.usdt.confirmedHint":"Payment confirmed, membership activated! Thank you for your purchase.","community.vipFree":"VIP Free","dashboard.indicator.publish.vipFree":"VIP Free","dashboard.indicator.publish.vipFreeHint":"When enabled: VIP users can use this indicator for free (non-VIP still need to purchase).","quickTrade.title":"Quick Trade","quickTrade.selectSymbol":"Select Trading Pair","quickTrade.exchange":"Exchange","quickTrade.selectExchange":"Select exchange account","quickTrade.cryptoOnly":"Crypto only","quickTrade.noExchange":"No crypto exchange accounts yet. Add one in Profile → Exchange Config.","quickTrade.available":"Available","quickTrade.long":"Long","quickTrade.short":"Short","quickTrade.market":"Market","quickTrade.limit":"Limit","quickTrade.limitPrice":"Limit Price","quickTrade.enterPrice":"Enter price","quickTrade.amount":"Amount","quickTrade.enterAmount":"Enter amount","quickTrade.leverage":"Leverage","quickTrade.tpsl":"TP/SL Price (Optional)","quickTrade.tp":"Take Profit Price","quickTrade.sl":"Stop Loss Price","quickTrade.tpPlaceholder":"Enter TP price","quickTrade.slPlaceholder":"Enter SL price","quickTrade.optional":"Optional","quickTrade.buyLong":"Buy / Long","quickTrade.sellShort":"Sell / Short","quickTrade.currentPosition":"Current Position","quickTrade.side":"Side","quickTrade.posSize":"Size","quickTrade.entryPrice":"Entry Price","quickTrade.markPrice":"Mark Price","quickTrade.unrealizedPnl":"Unrealized PnL","quickTrade.closePosition":"Close Position","quickTrade.noPosition":"No Position","quickTrade.noPositionHint":"No position for current trading pair","quickTrade.recentTrades":"Recent Trades","quickTrade.orderSuccess":"Order placed successfully!","quickTrade.orderFailed":"Order failed","quickTrade.positionClosed":"Position closed!","quickTrade.openPanel":"Quick Trade","quickTrade.tradeNow":"Trade Now","profile.exchange.title":"Exchange Config","profile.exchange.hint":"Manage your exchange API keys and broker connections. They can be used in Trading Assistant and Quick Trade.","profile.exchange.addAccount":"Add Exchange Account","profile.exchange.noAccounts":"No exchange accounts yet. Click the button above to add one.","profile.exchange.colExchange":"Exchange","profile.exchange.colName":"Name","profile.exchange.colHint":"Connection Info","profile.exchange.colCreatedAt":"Created At","profile.exchange.colActions":"Actions","profile.exchange.deleteConfirm":"Are you sure you want to delete this exchange account? This cannot be undone.","profile.exchange.deleteSuccess":"Exchange account deleted","profile.exchange.addTitle":"Add Exchange Account","profile.exchange.selectExchange":"Select Exchange","profile.exchange.accountName":"Account Name (Optional)","profile.exchange.accountNamePlaceholder":"e.g. Main Account, Test Account","profile.exchange.apiKey":"API Key","profile.exchange.secretKey":"Secret Key","profile.exchange.passphrase":"Passphrase","profile.exchange.demoTrading":"Demo Trading","profile.exchange.ibkrHost":"TWS/Gateway Host","profile.exchange.ibkrPort":"TWS/Gateway Port","profile.exchange.ibkrPortHint":"TWS Paper:7497 | TWS Live:7496 | Gateway Paper:4002 | Gateway Live:4001","profile.exchange.ibkrClientId":"Client ID","profile.exchange.ibkrAccount":"Account (Optional)","profile.exchange.mt5Server":"Server","profile.exchange.mt5Login":"Login","profile.exchange.mt5Password":"Password","profile.exchange.mt5TerminalPath":"Terminal Path (Optional)","profile.exchange.mt5TerminalPathHint":"Path to MT5 terminal, e.g. C:\\Program Files\\MetaTrader 5\\terminal64.exe","profile.exchange.testConnection":"Test Connection","profile.exchange.testSuccess":"Connection successful!","profile.exchange.testFailed":"Connection failed","profile.exchange.saveSuccess":"Exchange account added successfully","profile.exchange.saveFailed":"Failed to add account","profile.exchange.typeCrypto":"Crypto Exchange","profile.exchange.typeIBKR":"US Stocks (IBKR)","profile.exchange.typeMT5":"Forex (MetaTrader 5)","profile.exchange.localDeploymentRequired":"Local deployment required","profile.exchange.localDeploymentHint":"This broker requires local deployment of QuantDinger to use.","profile.exchange.goToManage":"Go to Profile → Exchange Config to manage","profile.exchange.noCredentialHint":"Please add an exchange account in Profile first","adminOrders.tabTitle":"Order List","adminOrders.totalOrders":"Total Orders","adminOrders.paidOrders":"Paid","adminOrders.pendingOrders":"Pending","adminOrders.totalRevenue":"Total Revenue","adminOrders.filterAll":"All Status","adminOrders.filterPending":"Pending","adminOrders.filterPaid":"Paid","adminOrders.filterConfirmed":"Confirmed","adminOrders.filterExpired":"Expired","adminOrders.searchPlaceholder":"Search by username/email","adminOrders.colUser":"User","adminOrders.colType":"Type","adminOrders.colPlan":"Plan","adminOrders.colAmount":"Amount","adminOrders.colStatus":"Status","adminOrders.colChain":"Chain","adminOrders.colAddress":"Address","adminOrders.colTxHash":"Tx Hash","adminOrders.colCreatedAt":"Created","adminOrders.lifetime":"Lifetime","adminOrders.yearly":"Yearly","adminOrders.monthly":"Monthly","adminOrders.statusPaid":"Paid","adminOrders.statusConfirmed":"Confirmed","adminOrders.statusPending":"Pending","adminOrders.statusExpired":"Expired","adminOrders.statusCancelled":"Cancelled","adminOrders.statusFailed":"Failed","adminAiStats.tabTitle":"AI Analysis","adminAiStats.totalAnalyses":"Total Analyses","adminAiStats.activeUsers":"Active Users","adminAiStats.uniqueSymbols":"Symbols Analyzed","adminAiStats.accuracy":"Correct / Verified","adminAiStats.userStatsTitle":"Per-User Statistics","adminAiStats.recentTitle":"Recent Analysis Records","adminAiStats.searchPlaceholder":"Search by username","adminAiStats.colUser":"User","adminAiStats.colAnalysisCount":"Analyses","adminAiStats.colSymbols":"Symbols","adminAiStats.colMarkets":"Markets","adminAiStats.colAccuracy":"Correct / Wrong","adminAiStats.colFeedback":"Feedback","adminAiStats.colLastAnalysis":"Last Analysis","adminAiStats.colMarket":"Market","adminAiStats.colSymbol":"Symbol","adminAiStats.colModel":"Model","adminAiStats.colStatus":"Status","adminAiStats.colCreatedAt":"Time","adminAiStats.helpful":"Helpful","adminAiStats.notHelpful":"Not Helpful","polymarket.title":"Prediction Markets","polymarket.subtitle":"AI analysis and trading opportunity recommendations based on Polymarket prediction market data","polymarket.filter.category":"Select Category","polymarket.filter.sortBy":"Sort By","polymarket.sort.volume":"24h Volume","polymarket.sort.aiScore":"AI Opportunity Score","polymarket.sort.highProbability":"High Probability","polymarket.sort.highReturn":"High Return Ratio","polymarket.search.placeholder":"Search prediction markets...","polymarket.category.all":"All","polymarket.category.crypto":"Cryptocurrency","polymarket.category.politics":"Politics","polymarket.category.economics":"Economics","polymarket.category.sports":"Sports","polymarket.category.tech":"Tech","polymarket.category.finance":"Finance","polymarket.category.geopolitics":"Geopolitics","polymarket.category.culture":"Culture","polymarket.category.climate":"Climate","polymarket.category.entertainment":"Entertainment","polymarket.market.currentProbability":"Current Probability","polymarket.ai.predicted":"AI Predicted Probability","polymarket.ai.marketProbability":"Market Probability","polymarket.ai.recommendation":"AI Recommendation","polymarket.ai.confidence":"Confidence","polymarket.ai.opportunityScore":"Opportunity Score","polymarket.ai.reasoning":"Analysis Reasoning","polymarket.ai.keyFactors":"Key Factors","polymarket.recommendation.YES":"YES (Bullish)","polymarket.recommendation.NO":"NO (Bearish)","polymarket.recommendation.HOLD":"HOLD (Neutral)","polymarket.status.active":"Active","polymarket.status.closed":"Closed","polymarket.status.resolved":"Resolved","polymarket.action.viewDetail":"View Details","polymarket.action.viewOnPolymarket":"View on Polymarket","polymarket.detail.title":"Prediction Market Details","polymarket.detail.currentProbability":"Current Probability","polymarket.detail.volume24h":"24h Volume","polymarket.detail.liquidity":"Liquidity","polymarket.detail.aiAnalysis":"AI Analysis Results","polymarket.detail.assetOpportunities":"Related Asset Trading Opportunities","polymarket.opportunity.confidence":"Confidence","polymarket.opportunity.analyze":"Analyze Asset","polymarket.signal.BUY":"BUY","polymarket.signal.SELL":"SELL","polymarket.signal.HOLD":"HOLD","polymarket.error.loadFailed":"Failed to load markets","polymarket.error.searchFailed":"Search failed","polymarket.error.notFound":"Market not found","polymarket.error.loadDetailFailed":"Failed to load details","polymarket.viewOnPolymarket":"View on Polymarket","polymarket.filter.explanation.title":"Filter Explanation","polymarket.filter.explanation.volume":"Sorted by 24h trading volume, showing the most active prediction markets.","polymarket.filter.explanation.aiScore":"Sorted by AI opportunity score, considering AI-market divergence, confidence, and other factors. High-value opportunities are prioritized.","polymarket.filter.explanation.highProbability":"Sorted by AI predicted probability, prioritizing events with high AI probability (AI prediction > market probability + 10%).","polymarket.filter.explanation.highReturn":"Sorted by high return ratio, prioritizing opportunities with large AI-market divergence and high confidence (divergence × confidence). Suitable for finding undervalued predictions.","polymarket.deepAnalysis.prompt":"Currently showing rule-based simple analysis. Click the button below for AI deep analysis to get more accurate predictions and recommendations.","polymarket.deepAnalysis.button":"Deep Analysis","polymarket.deepAnalysis.success":"Deep analysis completed! Credits charged: {credits}, Remaining: {remaining}","polymarket.deepAnalysis.successFree":"Deep analysis completed!","polymarket.deepAnalysis.failed":"Deep analysis failed, please try again later","polymarket.deepAnalysis.insufficientCredits":"Insufficient credits! Required: {required}, Current: {current}, Shortage: {shortage}","polymarket.error.invalidMarketId":"Invalid market ID","polymarket.analysis.title":"Polymarket Prediction Market Analysis","polymarket.analysis.description":"Enter a Polymarket link or market title, and AI will analyze trading opportunities for you","polymarket.analysis.startAnalysis":"Start Analysis","polymarket.analysis.inputHint":"Please enter a Polymarket market link or market title","polymarket.analysis.inputPlaceholder":'e.g., https://polymarket.com/event/xxx or "Bitcoin price above $100k in 2025?"',"polymarket.analysis.inputRequired":"Please enter a Polymarket link or market title","polymarket.analysis.analyzeButton":"Start Analysis","polymarket.analysis.analyzing":"Analyzing, please wait...","polymarket.analysis.success":"Analysis completed!","polymarket.analysis.failed":"Analysis failed, please try again later","polymarket.analysis.insufficientCredits":"Insufficient credits, please recharge first","polymarket.analysis.viewOnPolymarket":"View on Polymarket","polymarket.analysis.aiAnalysis":"AI Analysis Results","polymarket.analysis.marketProbability":"Market Probability","polymarket.analysis.aiPredictedProbability":"AI Predicted Probability","polymarket.analysis.divergence":"Divergence","polymarket.analysis.recommendation":"Recommendation","polymarket.analysis.recommendationYes":"YES (Bullish)","polymarket.analysis.recommendationNo":"NO (Bearish)","polymarket.analysis.recommendationHold":"HOLD (Neutral)","polymarket.analysis.confidenceScore":"Confidence Score","polymarket.analysis.opportunityScore":"Opportunity Score","polymarket.analysis.reasoning":"Analysis Reasoning","polymarket.analysis.keyFactors":"Key Factors","polymarket.analysis.creditsCharged":"Credits charged for this analysis: {credits}","polymarket.analysis.remainingCredits":"Remaining credits: {credits}","polymarket.analysis.newAnalysis":"New Analysis","polymarket.analysis.tabAnalyze":"Analyze","polymarket.analysis.tabHistory":"History","polymarket.analysis.historyMarket":"Market","polymarket.analysis.historyRecommendation":"Recommendation","polymarket.analysis.historyOpportunityScore":"Opportunity Score","polymarket.analysis.historyCreatedAt":"Analysis Time","polymarket.analysis.historyTotal":"Total {total} records","polymarket.analysis.loadHistoryFailed":"Failed to load history","aiAssetAnalysis.tabs.polymarket":"Prediction Markets"};t["default"]=(0,i.A)((0,i.A)({},r),l)},32647:function(e,t,a){"use strict";a(23792),a(3362),a(69085),a(9391),a(74423),a(21699),a(52675),a(89463),a(66412),a(60193),a(92168),a(2259),a(86964),a(83237),a(61833),a(67947),a(31073),a(45700),a(78125),a(20326),a(28706),a(26835),a(33771),a(2008),a(50113),a(48980),a(46449),a(78350),a(23418),a(48598),a(62062),a(31051),a(34782),a(26910),a(87478),a(54554),a(93514),a(30237),a(54743),a(46761),a(11745),a(89572),a(48957),a(62010),a(4731),a(36033),a(93153),a(82326),a(36389),a(64444),a(8085),a(77762),a(65070),a(60605),a(39469),a(72152),a(75376),a(56624),a(11367),a(5914),a(78553),a(98690),a(60479),a(70761),a(2892),a(45374),a(25428),a(32637),a(40150),a(59149),a(64601),a(44435),a(87220),a(25843),a(9868),a(17427),a(87607),a(5506),a(52811),a(53921),a(83851),a(81278),a(1480),a(40875),a(29908),a(94052),a(94003),a(221),a(79432),a(9220),a(7904),a(93967),a(93941),a(10287),a(26099),a(16034),a(39796),a(60825),a(87411),a(21211),a(40888),a(9065),a(86565),a(32812),a(84634),a(71137),a(30985),a(34268),a(34873),a(84864),a(27495),a(69479),a(38781),a(31415),a(23860),a(99449),a(27337),a(47764),a(71761),a(35701),a(68156),a(85906),a(42781),a(25440),a(5746),a(90744),a(11392),a(42762),a(39202),a(43359),a(89907),a(11898),a(35490),a(5745),a(94298),a(60268),a(69546),a(20781),a(50778),a(89195),a(46276),a(48718),a(16308),a(34594),a(29833),a(46594),a(72107),a(95477),a(21489),a(22134),a(3690),a(61740),a(81630),a(72170),a(75044),a(69539),a(31694),a(89955),a(33206),a(48345),a(44496),a(66651),a(12887),a(19369),a(66812),a(8995),a(52568),a(31575),a(36072),a(88747),a(28845),a(29423),a(57301),a(373),a(86614),a(41405),a(33684),a(73772),a(30958),a(23500),a(62953),a(59848),a(122),a(3296),a(27208),a(48408),a(7452);var i=a(85471),s=function(){var e=this,t=e._self._c;return t("a-config-provider",{attrs:{locale:e.locale,direction:e.direction}},[t("div",{attrs:{id:"app"}},[t("router-view")],1)])},o=[],n={navTheme:"light",primaryColor:"#13C2C2",layout:"sidemenu",contentWidth:"Fluid",fixedHeader:!0,fixSiderbar:!0,colorWeak:!1,menu:{locale:!0},title:"QuantDinger",pwa:!1,iconfontUrl:"",production:!0},r=function(e){document.title=e;var t=navigator.userAgent,a=/\bMicroMessenger\/([\d\.]+)/;if(a.test(t)&&/ip(hone|od|ad)/i.test(t)){var i=document.createElement("iframe");i.src="/favicon.ico",i.style.display="none",i.onload=function(){setTimeout(function(){i.remove()},9)},document.body.appendChild(i)}},l=n.title,d=a(76338),c=a(64765),u=a(74053),m=a.n(u),g=a(95093),p=a.n(g),h=a(45958);i.Ay.use(c.A);var f="en-US",y={"en-US":(0,d.A)({},h["default"])},b=new c.A({silentTranslationWarn:!0,locale:f,fallbackLocale:f,messages:y}),v=[f];function A(e){b.locale=e;var t=document.documentElement,a=/^ar/i.test(e);return t&&(t.setAttribute("lang",e),t.setAttribute("dir",a?"rtl":"ltr")),document.body&&(document.body.setAttribute("dir",a?"rtl":"ltr"),document.body.classList.toggle("rtl",a)),e}function k(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;return new Promise(function(t){return m().set("lang",e),b.locale!==e?v.includes(e)?t(A(e)):a(2162)("./".concat(e)).then(function(t){var a=t.default;return b.setLocaleMessage(e,a),v.push(e),p().updateLocale(a.momentName,a.momentLocale),A(e)}):t(e)})}function S(e){return b.t("".concat(e))}var w,T,P=b,C={data:function(){return{}},computed:{locale:function(){var e=this.$route.meta.title;return e&&r("".concat(S(e)," - ").concat(l)),this.$i18n.getLocaleMessage(this.$store.getters.lang).antLocale},direction:function(){var e=this.$store.getters.lang;return e&&/^ar/i.test(e)?"rtl":"ltr"},theme:function(){return this.$store.state.app.theme}},watch:{theme:{handler:function(e){"dark"===e||"realdark"===e?(document.body.classList.add("dark"),document.body.classList.remove("light")):(document.body.classList.remove("dark"),document.body.classList.add("light"))},immediate:!0}}},E=C,R=a(845),I=(0,R.A)(E,s,o,!1,null,null,null),M=I.exports,_=a(40173),L=function(){var e=this,t=e._self._c;return t("div",{class:["user-layout-wrapper",e.isMobile&&"mobile"],attrs:{id:"userLayout"}},[t("div",{staticClass:"container"},[e._m(0),t("div",{staticClass:"user-layout-lang"},[t("select-lang",{staticClass:"select-lang-trigger"})],1),t("div",{staticClass:"user-layout-content"},[e._m(1),t("div",{staticClass:"main-content"},[t("router-view")],1),t("div",{staticClass:"footer"},[t("div",{staticClass:"copyright"},[e._v(" Copyright © 2025-2026 Quantdinger.com "),t("div",{staticStyle:{width:"70%","text-align":"center","margin-left":"15%","margin-top":"10px"}},[t("a",{staticStyle:{color:"#1890ff",cursor:"pointer"},on:{click:e.toggleRisk}},[e._v(" "+e._s(e.showRisk?e.$t("user.login.privacy.collapse"):e.$t("user.login.privacy.view"))+" ")]),e.showRisk?t("div",{staticStyle:{"margin-top":"10px","font-size":"12px",color:"rgba(0,0,0,0.65)","line-height":"1.6","text-align":"left"}},[t("div",{staticStyle:{"font-weight":"600","margin-bottom":"6px"}},[e._v(e._s(e.$t("user.login.privacy.title")))]),e._v(" "+e._s(e.$t("user.login.privacy.content"))+" ")]):e._e()])])])])])])},x=[function(){var e=this,t=e._self._c;return t("div",{staticClass:"fx-layer",attrs:{"aria-hidden":"true"}},[t("div",{staticClass:"fx-gradient"}),t("div",{staticClass:"fx-grid"})])},function(){var e=this,t=e._self._c;return t("div",{staticClass:"top"},[t("div",{staticClass:"header"},[t("a",{attrs:{href:"/"}},[t("img",{staticClass:"logo",attrs:{src:a(33153),alt:"logo"}})])])])}],D=a(95353),N={computed:(0,d.A)({},(0,D.aH)({isMobile:function(e){return e.app.isMobile}}))},F=(a(63713),a(77197)),O=(a(78269),a(40255)),B=(a(1747),a(36457)),H={computed:(0,d.A)({},(0,D.aH)({currentLang:function(e){return e.app.lang}})),methods:{setLang:function(e){this.$store.dispatch("setLang",e)}}},U=H,q=["en-US","ja-JP","ko-KR","vi-VN","th-TH","ar-SA","fr-FR","de-DE","zh-TW","zh-CN"],j={"zh-CN":"简体中文","zh-TW":"繁體中文","en-US":"English","ja-JP":"日本語","ko-KR":"한국어","vi-VN":"Tiếng Việt","th-TH":"ไทย","ar-SA":"العربية","fr-FR":"Français","de-DE":"Deutsch"},W={"zh-CN":"🇨🇳","zh-TW":"sg","en-US":"🇺🇸","ja-JP":"🇯🇵","ko-KR":"🇰🇷","vi-VN":"🇻🇳","th-TH":"🇹🇭","ar-SA":"🇸🇦","fr-FR":"🇫🇷","de-DE":"🇩🇪"},$={props:{prefixCls:{type:String,default:"ant-pro-drop-down"}},name:"SelectLang",mixins:[U],render:function(){var e=this,t=arguments[0],a=this.prefixCls,i=function(t){var a=t.key;e.setLang(a)},s=t(B.Ay,{class:["menu","ant-pro-header-menu"],attrs:{selectedKeys:[this.currentLang]},on:{click:i}},[q.map(function(e){return t(B.Ay.Item,{key:e},[t("span",{attrs:{role:"img","aria-label":j[e]}},[W[e]])," ",j[e]])})]);return t(F.Ay,{attrs:{overlay:s,placement:"bottomRight"}},[t("span",{class:a},[t(O.A,{attrs:{type:"global",title:S("navBar.lang")}})])])}},G=$,Q={name:"UserLayout",components:{SelectLang:G},mixins:[N],data:function(){return{showRisk:!1}},methods:{toggleRisk:function(){this.showRisk=!this.showRisk}},mounted:function(){document.body.classList.add("userLayout")},beforeDestroy:function(){document.body.classList.remove("userLayout")}},V=Q,K=(0,R.A)(V,L,x,!1,null,"7ae30672",null),z=K.exports,Y=function(){var e=this,t=e._self._c;return t("div",[t("router-view")],1)},X=[],J={name:"BlankLayout"},Z=J,ee=(0,R.A)(Z,Y,X,!1,null,"7f25f9eb",null),te=(ee.exports,function(){var e=this,t=e._self._c;return t("div",{class:["basic-layout-wrapper",e.settings.theme]},[t("pro-layout",e._b({attrs:{menus:e.menus,collapsed:e.collapsed,mediaQuery:e.query,isMobile:e.isMobile,handleMediaQuery:e.handleMediaQuery,handleCollapse:e.handleCollapse,i18nRender:e.i18nRender},scopedSlots:e._u([{key:"menuHeaderRender",fn:function(){return[t("div",[t("img",{attrs:{src:a(2304)}}),t("h1",[e._v(e._s(e.title))])])]},proxy:!0},{key:"headerContentRender",fn:function(){return[t("div",[t("a-tooltip",{attrs:{title:e.$t("menu.header.refreshPage")}},[t("a-icon",{staticStyle:{"font-size":"18px",cursor:"pointer"},attrs:{type:"reload"},on:{click:e.handleRefresh}})],1)],1)]},proxy:!0},{key:"rightContentRender",fn:function(){return[t("right-content",{attrs:{"top-menu":"topmenu"===e.settings.layout,"is-mobile":e.isMobile,theme:e.settings.theme}})]},proxy:!0},{key:"footerRender",fn:function(){return[t("div",{staticStyle:{display:"none"}})]},proxy:!0}])},"pro-layout",e.settings,!1),[t("a-modal",{attrs:{visible:e.showLegalModal,footer:null,title:e.$t("menu.footer.userAgreement"),width:800},on:{cancel:function(t){e.showLegalModal=!1}}},[t("div",{staticStyle:{"max-height":"60vh",overflow:"auto","white-space":"pre-wrap","line-height":"1.8",padding:"16px"}},[e._v(" "+e._s(e.menuFooterConfig.legal.user_agreement||e.$t("user.login.legal.content"))+" ")]),t("div",{staticStyle:{"margin-top":"12px","text-align":"right"}},[t("a-button",{attrs:{type:"primary"},on:{click:function(t){e.showLegalModal=!1}}},[e._v("OK")])],1)]),t("a-modal",{attrs:{visible:e.showPrivacyModal,footer:null,title:e.$t("menu.footer.privacyPolicy"),width:800},on:{cancel:function(t){e.showPrivacyModal=!1}}},[t("div",{staticStyle:{"max-height":"60vh",overflow:"auto","white-space":"pre-wrap","line-height":"1.8",padding:"16px"}},[e._v(" "+e._s(e.menuFooterConfig.legal.privacy_policy||e.$t("user.login.privacy.content"))+" ")]),t("div",{staticStyle:{"margin-top":"12px","text-align":"right"}},[t("a-button",{attrs:{type:"primary"},on:{click:function(t){e.showPrivacyModal=!1}}},[e._v("OK")])],1)]),t("setting-drawer",{ref:"settingDrawer",attrs:{settings:e.settings},on:{change:e.handleSettingChange}},[t("div",{staticStyle:{margin:"12px 0"}},[e._v(" This is SettingDrawer custom footer content. ")])]),t("router-view",{key:e.refreshKey})],1),t("div",{staticClass:"custom-menu-footer",class:{collapsed:e.collapsed,"drawer-open":e.isMobile&&e.isDrawerOpen,"drawer-animating":e.isMobile&&e.isDrawerAnimating}},[e.collapsed?e._e():t("div",{staticClass:"menu-footer-content"},[t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-title"},[e._v(e._s(e.$t("menu.footer.contactUs")))]),t("div",{staticClass:"section-links"},[t("a",{attrs:{href:e.menuFooterConfig.contact.support_url,target:"_blank"}},[e._v(e._s(e.$t("menu.footer.support")))]),t("span",{staticClass:"separator"},[e._v("|")]),t("a",{attrs:{href:e.menuFooterConfig.contact.feature_request_url,target:"_blank"}},[e._v(e._s(e.$t("menu.footer.featureRequest")))])])]),t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-title"},[e._v(e._s(e.$t("menu.footer.getSupport")))]),t("div",{staticClass:"section-links"},[t("a",{attrs:{href:"mailto:"+e.menuFooterConfig.contact.email}},[e._v(e._s(e.$t("menu.footer.email")))]),t("span",{staticClass:"separator"},[e._v("|")]),t("a",{attrs:{href:e.menuFooterConfig.contact.live_chat_url,target:"_blank"}},[e._v(e._s(e.$t("menu.footer.liveChat")))])])]),e.menuFooterConfig.social_accounts&&e.menuFooterConfig.social_accounts.length>0?t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-title"},[e._v(e._s(e.$t("menu.footer.socialAccounts")))]),t("div",{staticClass:"social-icons"},e._l(e.menuFooterConfig.social_accounts,function(e,a){return t("a",{key:a,staticClass:"social-icon",attrs:{href:e.url,target:"_blank",rel:"noopener noreferrer",title:e.name}},[t("Icon",{staticClass:"social-icon-svg",attrs:{icon:"simple-icons:".concat(e.icon)}})],1)}),0)]):e._e(),t("div",{staticClass:"footer-section"},[t("div",{staticClass:"section-links"},[t("a",{on:{click:function(t){e.showLegalModal=!0}}},[e._v(e._s(e.$t("menu.footer.userAgreement")))]),t("span",{staticClass:"separator"},[e._v("&")]),t("a",{on:{click:function(t){e.showPrivacyModal=!0}}},[e._v(e._s(e.$t("menu.footer.privacyPolicy")))])])]),t("div",{staticClass:"footer-section copyright"},[e._v(" "+e._s(e.menuFooterConfig.copyright)+" ")]),t("div",{staticClass:"footer-section version"},[e._v(" V2.2.3 ")])])])],1)}),ae=[],ie=a(18787),se=a(69511),oe=a.n(se),ne=a(58391),re=a.n(ne),le={getAntdSerials:function(e){var t=new Array(9).fill().map(function(t,a){return oe().varyColor.lighten(e,a/10)}),a=re()(e),i=oe().varyColor.toNum3(e.replace("#","")).join(",");return t.concat(a).concat(i)},changeColor:function(e){if(!oe()||!oe().changer||"function"!==typeof oe().changer.changeColor)return Promise.resolve();var t={newColors:this.getAntdSerials(e),changeUrl:function(e){return"/".concat(e)}};try{return oe().changer.changeColor(t,Promise)}catch(a){return Promise.resolve()}}},de=function(){return[{key:P.t("app.setting.themecolor.dust"),color:"#F5222D"},{key:P.t("app.setting.themecolor.volcano"),color:"#FA541C"},{key:P.t("app.setting.themecolor.sunset"),color:"#FAAD14"},{key:P.t("app.setting.themecolor.cyan"),color:"#13C2C2"},{key:P.t("app.setting.themecolor.green"),color:"#52C41A"},{key:P.t("app.setting.themecolor.daybreak"),color:"#1890FF"},{key:P.t("app.setting.themecolor.geekblue"),color:"#2F54EB"},{key:P.t("app.setting.themecolor.purple"),color:"#722ED1"}]},ce=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=t?null:ie.A.loading(P.t("app.setting.theme.switching"),0);le.changeColor(e).finally(function(){a&&setTimeout(function(){a()},10)})},ue=function(e){var t=document.body.querySelector("#app");e?t.classList.add("colorWeak"):t.classList.remove("colorWeak")},me=a(75314),ge=function(){var e=this,t=e._self._c;return t("div",{class:e.wrpCls},[t("avatar-dropdown",{class:e.prefixCls,attrs:{menu:!0,"current-user":e.currentUser}}),t("notice-icon",{class:e.prefixCls}),t("select-lang",{class:e.prefixCls}),t("a-tooltip",{attrs:{title:e.$t("app.setting.tooltip")}},[t("span",{class:e.prefixCls,on:{click:e.handleSettingClick}},[t("a-icon",{staticStyle:{"font-size":"16px"},attrs:{type:"setting"}})],1)])],1)},pe=[],he=a(26297),fe=function(){var e=this,t=e._self._c;return e.currentUser&&e.currentUser.name?t("a-dropdown",{attrs:{placement:"bottomRight"},scopedSlots:e._u([{key:"overlay",fn:function(){return[t("a-menu",{staticClass:"ant-pro-drop-down menu",attrs:{"selected-keys":[]}},[t("a-menu-item",{key:"profile",on:{click:e.handleProfile}},[t("a-icon",{attrs:{type:"user"}}),e._v(" "+e._s(e.$t("menu.profile")||"My Profile")+" ")],1),t("a-menu-divider"),t("a-menu-item",{key:"logout",on:{click:e.handleLogout}},[t("a-icon",{attrs:{type:"logout"}}),e._v(" "+e._s(e.$t("menu.account.logout"))+" ")],1)],1)]},proxy:!0}],null,!1,2847446919)},[t("span",{staticClass:"ant-pro-account-avatar"},[t("a-avatar",{staticClass:"antd-pro-global-header-index-avatar",attrs:{size:"small",src:e.currentUser.avatar}}),t("span",[e._v(e._s(e.currentUser.name))])],1)]):t("span",[t("a-spin",{style:{marginLeft:8,marginRight:8},attrs:{size:"small"}})],1)},ye=[],be=(a(62621),a(43898)),ve={name:"AvatarDropdown",props:{currentUser:{type:Object,default:function(){return null}},menu:{type:Boolean,default:!0}},methods:{handleProfile:function(){this.$router.push({name:"Profile"})},handleLogout:function(e){var t=this;be.A.confirm({title:this.$t("layouts.usermenu.dialog.title"),content:this.$t("layouts.usermenu.dialog.content"),onOk:function(){return t.$store.dispatch("Logout").then(function(){t.$router.push({name:"login"})})},onCancel:function(){}})}}},Ae=ve,ke=(0,R.A)(Ae,fe,ye,!1,null,null,null),Se=ke.exports,we=function(){var e=this,t=e._self._c;return t("div",{staticClass:"notice-icon-wrapper"},[t("a-popover",{attrs:{trigger:"click",placement:"bottomRight",overlayClassName:"header-notice-wrapper",getPopupContainer:function(){return e.$refs.noticeRef.parentElement},autoAdjustOverflow:!0,arrowPointAtCenter:!0,overlayStyle:{width:"380px",top:"50px"}},model:{value:e.visible,callback:function(t){e.visible=t},expression:"visible"}},[t("template",{slot:"content"},[t("div",{staticClass:"notice-header"},[t("span",{staticClass:"notice-title"},[e._v(e._s(e.$t("notice.title")))]),e.notifications.length>0?t("a",{staticClass:"notice-action",on:{click:e.markAllRead}},[e._v(" "+e._s(e.$t("notice.markAllRead"))+" ")]):e._e()]),t("a-spin",{attrs:{spinning:e.loading}},[e.notifications.length>0?t("div",{staticClass:"notice-list"},e._l(e.notifications,function(a){return t("div",{key:a.id,staticClass:"notice-item",class:{unread:!a.is_read},on:{click:function(t){return e.handleNoticeClick(a)}}},[t("div",{staticClass:"notice-item-icon"},[t("a-icon",{style:{color:e.getNoticeColor(a.signal_type)},attrs:{type:e.getNoticeIcon(a.signal_type)}})],1),t("div",{staticClass:"notice-item-content"},[t("div",{staticClass:"notice-item-title"},[e._v(e._s(a.title))]),t("div",{staticClass:"notice-item-desc"},[e._v(e._s(e.truncateMessage(a.message)))]),t("div",{staticClass:"notice-item-time"},[e._v(e._s(e.formatTime(a.created_at)))])])])}),0):t("div",{staticClass:"notice-empty"},[t("a-empty",{attrs:{description:e.$t("notice.empty")}})],1)]),e.notifications.length>0?t("div",{staticClass:"notice-footer"},[t("a",{on:{click:e.clearNotifications}},[e._v(e._s(e.$t("notice.clear")))])]):e._e()],1),t("span",{ref:"noticeRef",staticClass:"header-notice",on:{click:e.fetchNotice}},[t("a-badge",{attrs:{count:e.unreadCount,overflowCount:99}},[t("a-icon",{staticStyle:{"font-size":"16px",padding:"4px"},attrs:{type:"bell"}})],1)],1)],2),t("a-modal",{attrs:{title:e.detailNotice?e.detailNotice.title:"",footer:null,width:e.isHtmlReport?900:600,wrapClassName:e.isHtmlReport?"notice-detail-modal html-report-modal":"notice-detail-modal",centered:""},model:{value:e.detailVisible,callback:function(t){e.detailVisible=t},expression:"detailVisible"}},[e.detailNotice?t("div",{staticClass:"notice-detail"},[t("div",{staticClass:"notice-detail-meta"},[t("div",{staticClass:"notice-detail-type"},[t("a-icon",{style:{color:e.getNoticeColor(e.detailNotice.signal_type)},attrs:{type:e.getNoticeIcon(e.detailNotice.signal_type)}}),t("span",{staticClass:"type-label"},[e._v(e._s(e.getNoticeTypeLabel(e.detailNotice.signal_type)))])],1),t("div",{staticClass:"notice-detail-time"},[t("a-icon",{attrs:{type:"clock-circle"}}),t("span",[e._v(e._s(e.formatFullTime(e.detailNotice.created_at)))])],1)]),t("a-divider"),t("div",{staticClass:"notice-detail-content",class:{"html-report":e.isHtmlReport}},[t("div",{staticClass:"message-body",domProps:{innerHTML:e._s(e.formatMessageHtml(e.detailNotice.message))}})]),!e.isHtmlReport&&e.detailNotice.payload&&Object.keys(e.detailNotice.payload).length>0?[t("a-divider"),t("div",{staticClass:"notice-detail-extra"},[t("div",{staticClass:"extra-title"},[e._v(e._s(e.$t("notice.detailInfo")))]),"ai_monitor"===e.detailNotice.signal_type?[e.detailNotice.payload.final_decision?t("div",{staticClass:"extra-item decision"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.aiDecision"))+":")]),t("a-tag",{attrs:{color:e.getDecisionColor(e.detailNotice.payload.final_decision)}},[e._v(" "+e._s(e.detailNotice.payload.final_decision)+" ")]),e.detailNotice.payload.confidence?t("span",{staticClass:"confidence"},[e._v(" ("+e._s(e.$t("notice.confidence"))+": "+e._s(e.detailNotice.payload.confidence)+"%) ")]):e._e()],1):e._e(),e.detailNotice.payload.reasoning?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.reasoning"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.reasoning))])]):e._e()]:e._e(),"price_alert"===e.detailNotice.signal_type?[e.detailNotice.payload.symbol?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.symbol"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.symbol))])]):e._e(),e.detailNotice.payload.price?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.currentPrice"))+":")]),t("span",{staticClass:"value"},[e._v("$"+e._s(e.detailNotice.payload.price))])]):e._e(),e.detailNotice.payload.trigger_price?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.triggerPrice"))+":")]),t("span",{staticClass:"value"},[e._v("$"+e._s(e.detailNotice.payload.trigger_price))])]):e._e()]:e._e(),"signal"===e.detailNotice.signal_type||"trade"===e.detailNotice.signal_type?[e.detailNotice.payload.symbol?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.symbol"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.symbol))])]):e._e(),e.detailNotice.payload.action?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.action"))+":")]),t("a-tag",{attrs:{color:"BUY"===e.detailNotice.payload.action?"green":"red"}},[e._v(" "+e._s(e.detailNotice.payload.action)+" ")])],1):e._e(),e.detailNotice.payload.quantity?t("div",{staticClass:"extra-item"},[t("span",{staticClass:"label"},[e._v(e._s(e.$t("notice.quantity"))+":")]),t("span",{staticClass:"value"},[e._v(e._s(e.detailNotice.payload.quantity))])]):e._e()]:e._e()],2)]:e._e(),t("div",{staticClass:"notice-detail-actions"},[e.detailNotice.payload&&e.detailNotice.payload.monitor_id?t("a-button",{attrs:{type:"primary"},on:{click:e.goToPortfolio}},[t("a-icon",{attrs:{type:"fund"}}),e._v(" "+e._s(e.$t("notice.viewPortfolio"))+" ")],1):e._e(),t("a-button",{on:{click:function(t){e.detailVisible=!1}}},[e._v(" "+e._s(e.$t("notice.close"))+" ")])],1)],2):e._e()])],1)},Te=[],Pe=a(2403),Ce=a(81127),Ee=a(56252),Re=a(36911),Ie=a(75769),Me={name:"HeaderNotice",data:function(){return{loading:!1,visible:!1,detailVisible:!1,detailNotice:null,notifications:[],unreadTotal:0,lastFetchId:0,pollingTimer:null}},computed:{unreadCount:function(){return Number(this.unreadTotal||0)},isHtmlReport:function(){return!(!this.detailNotice||!this.detailNotice.message)&&(this.detailNotice.message.includes('

')||this.detailNotice.message.includes("